目前我正在使用的服务:
@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();
});
});
有什么建议吗?预先感谢。
不推荐使用
NgModule
提供。
providedIn: 'root'
就是要走的路👌!