我想为一个Angular组件写一个测试。我们使用Jest。
要测试的组件使用模板中的库中的UI组件。如下所示:
<!-- my.component.html -->
<mylib-tab-group>
<mylib-tab>
<h1>Hello</h1>
</mylib-tab>
</mylib-tab-group>
字符串
为了限制这个问题,目前我的测试中除了初始化TestBed之外没有其他内容,而TestBed只是将依赖项导入到相应的lib模块中。
import { TestBed } from "@angular/core/testing"
import { MyLibTabsModule } from "MyLib"
describe('LoginProcedure-Feature', () => {
beforeEach(async () => {
await TestBed.configureTestingModule({
imports: [
MyLibTabsModule,
],
declarations: [],
providers: [],
}).compileComponents()
})
it('placeholder', () => {
expect(true).toBeTruthy()
})
})
型
唯一不好的是,当你运行测试时,这个问题会打印在命令行上:
ReferenceError: Cannot access 'MyLibTabGroupComponent' before initialization
1 | import { TestBed } from "@angular/core/testing"
> 2 | import { MyLibTabsModule } from "MyLib"
| ^
3 |
型
当我查看堆栈跟踪时,问题似乎出在已编译的MyLibTabsModule模块中的deps: [{ token: MyLibTabGroupComponent }
片段上。
MyLibTabComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: typescript
MyLibTabComponent, deps: [{ token: MyLibTabGroupComponent }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
型
但不幸的是我对此无能为力。
是什么导致了这种情况?
1条答案
按热度按时间ux6nzvsh1#
看起来jest找不到路径“MyLib”中的写入引用的组件
MyLibTabGroupComponent
。我的意思是,“MyLib”中的文件中的import
语句可能引用了相对文件或jest找不到的路径。在tsconfig.json
上配置的文件路径通常是罪魁祸首。如果这就是问题所在,要修复它,您需要告诉jest,例如,
@your-custom-path-name
将被<rootDir>/app/your/app/folder
替换这是在
jest.config
文件的transform部分完成的。您可能希望使用ts-jest来简化编写必要的配置。如果没有更多的代码,就很难提供更具体的信息。
另外,如果你能在stackblitz中提供一个最小的可重现问题,这将对你有很大的帮助。