大佬教程收集整理的这篇文章主要介绍了Angular(Jasmine / Karma) – 错误:非法状态:无法加载指令的摘要,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
LR-categories.component.spec.ts:
export function main() { describe('LrCategoriesComponent',() => { let fixture: ComponentFixture<LrCategoriesComponent>; let component: LrCategoriesComponent; let de: DebugElement; let glservice: GeneralLedgeservice; let lrservice: Lrservice; let spy: jasmine.Spy; beforeEach(async(() => { TESTBed.configureTesTingModule({ declarations: [ LrComponent,LrMappingsComponent,LrCategoriesComponent,],imports: [ CommonModule,SharedModule,LrRoutIngModule,AgGridModule.withComponents( [ ButtonComponent,columnHeaderComponent,TypeaheadEditorComponent,ButtonGroupComponent ] ) ],providers: [ Lrservice,{ provide: GeneralLedgeservice,useClass: mockGeneralLedgeservice },Completerservice,] }).compileComponents().then(() => { // initialization fixture = TESTBed.createComponent(LrCategoriesComponent); component = fixture.componenTinstance; de = fixture.debugElement; // service getters glservice = de.injector.get(GeneralLedgeservicE); lrservice = de.injector.get(LrservicE); }); })); // beforeEach(() => { // // initialization // fixture = TESTBed.createComponent(LrCategoriesComponent); // component = fixture.componenTinstance; // de = fixture.debugElement; // // // service getters // glservice = de.injector.get(GeneralLedgeservicE); // lrservice = de.injector.get(LrservicE); // }); it('should create LrCategoriesComponent',(() => { expect(component).toBeDefined(); })); }); }
@L_616_1@:
任何建议都被接受!我在这一点上绝望!
1.我从.compileComponents()移动了初始化内容.然后(()=> {…}); to beforeEach(()=> {…});.
(你可以看到它被评论)
export function main() { describe('LrCategoriesComponent',() => { let fixture: ComponentFixture<LrCategoriesComponent>; let component: LrCategoriesComponent; let de: DebugElement; let glservice: GeneralLedgeservice; let lrservice: Lrservice; let spy: jasmine.Spy; beforeEach(async(() => { TESTBed.configureTesTingModule({ // Module's stuff here }).compileComponents(); })); beforeEach(() => { // initialization fixture = TESTBed.createComponent(LrCategoriesComponent); component = fixture.componenTinstance; de = fixture.debugElement; // service getters glservice = de.injector.get(GeneralLedgeservicE); lrservice = de.injector.get(LrservicE); }); it('should create LrCategoriesComponent',(() => { expect(component).toBeDefined(); })); }); }
此@L_616_1@是因为在SharedModule中声明的其中一个组件在编译时遇到了问题(实际上,这发生在SharedModule声明[]中的任何组件上).
因此,我开始寻找在导入SharedModule(或其他重型模块)时解决spec文件设置的方法.
const oldResetTesTingModule = TESTBed.resetTesTingModule; beforeAll(done => (async () => { TESTBed.resetTesTingModule(); TESTBed.configureTesTingModule({ // Module's stuff here }); await TESTBed.compileComponents(); // prevent Angular from resetTing tesTing module TESTBed.resetTesTingModule = () => TESTBed; })().then(donE).catch(done.fail)); afterAll(() => { // reinstate resetTesTingModule method TESTBed.resetTesTingModule = oldResetTesTingModule; TESTBed.resetTesTingModule(); });
即使它最终以惊人的速度(5秒对20秒)完成所有工作,但这种方法有一个主要的缺点:每个describe()创建一次依赖关系,而不是每次测试.这意味着您从先前的测试用例继承了状态.我们不希望这样!
3.我回到原点,尝试理解并应用更智能的异步逻辑……:
– 解决方案 –
beforeEach(done => (async () => { TESTBed.configureTesTingModule({ // Module's stuff here,including SharedModule }); await TESTBed.compileComponents(); })().then(donE).catch(done.fail)); beforeEach(() => { // initialization fixture = TESTBed.createComponent(LrCategoriesComponent); component = fixture.componenTinstance; de = fixture.debugElement; // service getters glservice = de.injector.get(GeneralLedgeservicE); lrservice = de.injector.get(LrservicE); });
通过使用async / await来确保在尝试编译Component之前正确配置了Module.
以上是大佬教程为你收集整理的Angular(Jasmine / Karma) – 错误:非法状态:无法加载指令的摘要全部内容,希望文章能够帮你解决Angular(Jasmine / Karma) – 错误:非法状态:无法加载指令的摘要所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。