当前位置: 首页 > 知识库问答 >
问题:

为什么Jasmine会抛出很多错误:测试模块已经实例化了,还不能配置测试模块?

庾兴发
2023-03-14

我很困惑。我在学习Angular,我在为我的服务类编写单元测试,完全没有问题。今天我准备了第一个组件规范文件,Jasmine疯了。使用此代码时:

beforeEach(() => {
  TestBed.configureTestingModule({
    declarations: [FooterComponent],
  });
  fixture = TestBed.createComponent(FooterComponent);
  component = fixture.componentInstance;
  span = fixture.nativeElement.querySelector('span');
});

Jasmine在146次测试中的31次测试中给了我一个错误:

错误:当测试模块已经实例化时,无法配置测试模块。确保在R3TestBed.configureTestModule之前没有使用注入

所有的错误都在服务文件的测试中,组件测试没有一个错误。我猜这可能与创建fixture组件的实例有关。但我不知道该怎么做。当我注释所有夹具行时,如下图所示,没有一个错误:

beforeEach(() => {
  TestBed.configureTestingModule({
    declarations: [FooterComponent],
  });
  // fixture = TestBed.createComponent(FooterComponent);
  // component = fixture.componentInstance;
  // span = fixture.nativeElement.querySelector('span');
});

我已经试过了,没有效果:https://stackoverflow.com/a/39410211/12603542

此外,我无法在SO问题中处理类似的案例。这是我的服务测试文件的示例:

beforeEach(() => {
    TestBed.configureTestingModule({
      imports: [HttpClientTestingModule],
      providers: [
        {
          provide: HTTP_INTERCEPTORS,
          useClass: JwtInterceptor,
          multi: true,
        },
        { provide: AuthService, useValue: authMock },
      ],
    });

    injector = getTestBed();
    httpMock = injector.inject(HttpTestingController);
  });

  afterEach(() => {
    httpMock.verify();
  });

以及完全错误的示例:

错误:当测试模块已经实例化时,无法配置测试模块。确保在R3TestBed.configureTestModule之前没有使用注入。在TestBedRender3.assertNotInstantated(http://localhost:9876/karma_webpack/node_modules/@angular/core/ivy_ngcc/fesm2015/测试。js:2026:1)在TestBedRender3.configureTestModule(http://localhost:9876/karma_webpack/node_modules/@angular/core/ivy_ngcc/fesm2015/测试。js:1932:1)。配置测试模块(http://localhost:9876/karma_webpack/node_modules/@angular/core/ivy_ngcc/fesm2015/测试。js:1822:1)。(http://localhost:9876/karma_webpack/src/app/app-core/_helpers/jwt.interceptor.spec.ts:26:13)。调用(http://localhost:9876/karma_webpack/node_modules/zone.js/dist/zone-常绿植物。js:364:1)。onInvoke(调用)(http://localhost:9876/karma_webpack/node_modules/zone.js/dist/zone-测试。js:292:1)。调用(http://localhost:9876/karma_webpack/node_modules/zone.js/dist/zone-常绿植物。js:363:1)。运行(http://localhost:9876/karma_webpack/node_modules/zone.js/dist/zone-常绿植物。js:123:1)在runInTestZone(http://localhost:9876/karma_webpack/node_modules/zone.js/dist/zone-测试。js:545:1)。(http://localhost:9876/karma_webpack/node_modules/zone.js/dist/zone-testing.js:560:1)

共有1个答案

公羊信厚
2023-03-14

这个问题非常愚蠢。它缺少描述编译组件

describe('FooterComponent', () => {
  beforeEach(() => {
    TestBed.configureTestingModule({
      declarations: [FooterComponent],
    }).compileComponents();

    fixture = TestBed.createComponent(FooterComponent);
    component = fixture.componentInstance;
    span = fixture.nativeElement.querySelector('span');
  });
});
 类似资料:
  • 问题内容: 我正在尝试使用Jasmine规格文件对Angular服务进行单元测试。这需要加载模块。这是一个简单的规范,旨在简单地加载Angular模块: 当我运行Jasmine时,这将导致以下错误 jasmine.yml文件包含 该软件的版本为: Rails 3.2.7 jasmine-core 1.2.0 jasmine-headless-webkit 0.8.4 AngularJS 1.0.2

  • 我试图为我编写的一些代码编写单元测试,遇到的问题是我希望在执行函数后调用模拟回调,但我的测试失败,因为它从未被调用。 正在测试的功能非常简单: 我怀疑的问题是,由于请求的异步性质,jasmine在API调用中执行模拟回调之前测试期望值。我尝试过使用其他人建议使用的done()和flags,但没有成功。希望能在这方面提供一些指导。

  • 我正在开发一个分为maven模块的应用程序,如下所示: myApp家长 坚持 第一部分:持久层 对于module1/persistence,源代码位于包我有一个配置类: 第一个问题:我在这里使用了。我没有把放进去,因为持久性不是一个独立的应用程序,而是一种库。然而,我应该在这里使用而不是? 看起来只是的别名,但尽管我读了很多文章,我还是不清楚。 留档指出: 指示一个类提供Spring Boot应用

  • 我们的项目结构如下: 相关的JUnit测试位于A-A中。在使用Maven之前,我们必须调整Eclipse中的运行配置(将arguments选项卡中的工作目录设置为A-B,启动应用程序),以便在没有错误的情况下启动所有测试。 现在,当我们尝试运行测试时,无论我们是否在Eclipse中运行测试,我们都会从a-a中的类中得到一个 我的猜测是我们有一个错误的配置的POM和Surefire不能找到所有的类文

  • 2.6. 测试模块 所有的 Python 模块都是对象并且有几个有用的属性。 您可以使用这些属性方便地测试您所书写的模块。 下面是一个使用 if __name__ 的技巧。 if __name__ == "__main__": 在继续学习新东西之前, 有几点重要的观察结果。 首先, if 表达式无需使用圆括号括起来。 其次, if 语句以冒号结束, 随后跟随的是 缩进代码。 与 C 一样, Py

  • 我的问题是关于测试多模块Spring Boot应用程序。 我有一个多模块spring boot REST应用程序。应用程序的结构如下: 以上就是我的应用程序的结构。 SpringBootMainApplication是主要项目。SpringbootModule是SpringBootMainApplication中的子项目。“SpringBootMainApplication.war”WAR将在WA