角度测试。提供于:模块破坏

问题描述 投票:0回答:1

目前我正在使用的服务:

@Injectable({
  providedIn: MyModule
})
export class MyService {
 //... do stuff
}

---

@NgModule({
  declarations: [MyComp],
  imports: [
    ReactiveFormsModule,
    CommonModule,
    SharedModule,
    ComponentsModule,
    MyCompRoutingModule
  ],
  providers: [MyService]
})
export class MyModule {}

我花了几个小时试图理解为什么我收到错误:

MyComponent 应该存在 FAILED TypeError: 无法读取未定义的属性(读取 'ɵcmp')

这只发生在 Karma Jasmine 单元测试中。代码本身效果非常好!

不幸的是我不能使用

providedIn: 'root'
,但如果我使用它,我不会收到错误。与
providedIn: 'any'

相同
describe('MyComponent', () => {
  let component: MyComponent;
  let service: MyService;
  let fixture: ComponentFixture<MyComponent>;

  beforeEach(() => {
    TestBed.configureTestingModule({
      declarations: [MyComponent],
      imports: [
        HttpClientTestingModule,
        RouterTestingModule,
        ComponentsModule,
        SharedModule,
        ReactiveFormsModule
      ],
      providers: [
        MyService,
        HttpService
      ]
    }).compileComponents();

    fixture = TestBed.createComponent(MyComponent);
    component = fixture.componentInstance;
    service = TestBed.inject(MyService);
    fixture.detectChanges();
  });

  it('should create', () => {
    expect(component).toBeTruthy();
  });
});

有什么建议吗?预先感谢。

angular typescript unit-testing jasmine angular-unit-test
1个回答
0
投票

不推荐使用

NgModule
提供。

providedIn: 'root'
就是要走的路👌!

© www.soinside.com 2019 - 2024. All rights reserved.