问题描述
我在组件测试(Angular 9)中有一节检查该组件onSave()
的方法,并希望调用注入服务方法saveRecord()
。有2种情况:
- 高兴-
saveRecord()
返回记录可观察值 - 不高兴-抛出错误
测试代码如下:
describe('onSave() should call service saveRecord()',() => {
it('and with positive response should "go back()"',async () => {
const storeSpy1 = spyOn<any>(AbstractStore.prototype,'saveRecord')
.and.returnValue(of({}));
const windowHistorySpy = spyOn<any>(window.history,'back')
.and.stub();
const component: RecordDetailComponent = createComponent();
await component.onSave();
expect(storeSpy1).toHaveBeenCalledWith({});
expect(windowHistorySpy).toHaveBeenCalled();
});
it('and with error response shoud call "handleError()"',async () => {
const error = { error: 'some error' };
const storeSpy2 = spyOn<any>(AbstractStore.prototype,'saveRecord')
.and.returnValue(throwError(error));
const component: RecordDetailComponent = createComponent();
const handleErrorSpy = spyOn<any>(component,'handleError')
.and.stub();
await component.onSave();
expect(storeSpy2).toHaveBeenCalledWith({});
expect(handleErrorSpy).toHaveBeenCalledWith(error);
});
});
问题是这两个测试相互冲突-如果我同时运行这两个测试,则会出现错误Unhandled promise rejection: [object Object] thrown
。如果我评论其中一个(第一个或第二个),则运行正常-似乎spyOn<any>(AbstractStore.prototype,'saveRecord')...
在两次测试之间无法清除。
我可以像在笑话中一样删除afterEach()
部分中茉莉花中的间谍吗?
我的beforeEach()
代码如下:
beforeEach(async(() => {
Testbed.configureTestingModule({
imports: [ HttpClientModule ],providers: [
{
provide: ActivatedRoute,useValue: activeRoute,},AbstractStore,],})
.compileComponents();
}));
const createComponent = () => {
return new RecordDetailComponent(Testbed.inject(ActivatedRoute),Testbed.inject(AbstractStore));
};
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)