angular - 使用 Injector 进行测试服务
问题描述
我有一个服务在它的依赖项之前被引导,因此我Injector
在它准备好时用来实现我的依赖项。
constructor(private readonly injector: Injector) {
const interval = setInterval(() => {
const myService = injector.get(MyService);
if (myService) {
this.myService = myService;
clearInterval(interval);
}
}, 200);
}
在我的测试中,我有
beforeEach(() => {
return TestBed.configureTestingModule({
providers: [
{
provide: MyClass,
useClass: MyClass,
deps: [
Injector,
]
},
{
provide: MyService,
useValue: myServiceMock
},
]
});
});
问题是TestBed.get(MyService) !== TestBed.get(MyClass).myService
。
由于某种原因,它变成了相同的两个不同实例。
我如何使成为一个实例?
解决方案
通过使用解决fakeAsync
。由于服务使用setInterval
它最终会在不同的情况下解决。
现在服务分配看起来像这样
beforeEach(fakeAsync(() => {
myClass = TestBed.get(MyClass);
tick(200);
myService = TestBed.get(MyService);
}));
另外我写了一个测试来确保相同的实例
expect(myService).toBe((myClass as any).myService)
推荐阅读
- javascript - 如何判断A是否包含B?在 JavaScript 中
- android - 未解决的参考:runOnUiThread Kotlin
- r - 如何将 R 闪亮应用程序的不同 git 分支部署到 shinyapps.io 中的不同目的地?
- ios - UICollectionViewDiffableDataSource:当collection view只有0个section时,请求section 0的item数
- excel - Excel如何从单列搜索结果中抓取整行数据
- angular - Angular:如何访问索引 - 数组中的键值
- io - 有没有办法在不使用该模块中的函数的情况下打印模块类型?
- xamarin.forms - Picker 的 ItemDisplayBinding 的 MultiBinding 在添加新项目时抛出 Null 引用异常
- python - Vscode - .env 文件中的变量扩展
- c# - 在画布前对游戏对象进行排序