我的测试中遇到了cdr.detectChanges()的问题。我在调用它时发生了错误,我没有任何信息,我只是得到了这个错误:
ZoneAwareError @ webpack:///~/zone.js/dist/zone.js:923:0< - 配置/果报shim.js:108645:28 invokeTask @ webpack:///~/zone.js/dist/zone.js:398:0< - config / karma-shim.js:108120:36 onInvokeTask @ webpack:///~/zone.js/dist/proxy.js:103:0< - config / karma-shim.js:107642:49
有没有办法让detectChanges工作?
我还尝试通过在我的测试组件配置中定义cdr来使detectChanges不做任何事来尝试其他方法:
cdr = {
detectChanges: () => {}
}
然后在提供者{ provide: ChangeDetectorRef, useValue: cdr }
中,但是当我在console.info中测试的方法中的cdr时,似乎我仍然拥有原始的cdr类。
我也尝试过这样定义的假类:
class FakeCDR {
detectChanges(): void {
}
}
然后是提供商中的{ provide: ChangeDetectorRef, useClass: FakeCDR }
,但这里也一样。
这是我的测试代码:
it('should create an user', fakeAsync(inject([MockBackend],
(backend: MockBackend) => {
fixture.detectChanges()
tick()
component.newUser = User.newUserDraft()
component.newUser.email = "email@gmail.com"
component.createUser()
tick()
expect(component.newUser.email).toBe(User.newUserDraft().email)
})))
并且在createUser中它正在做一个service.createUser然后做一些东西然后cdr.detectChanges()。我确实把console.info放在了每一行,所以我确定它在detectChanges上失败了。
答案 0 :(得分:0)
首先要考虑的因素:
$http(req).then(function(result) {
$cookieStore.put('XSRF-TOKEN', result.data.session);
}, function(error) {
console.log(error);
}
);
...
...
if ($cookieStore.get('XSRF-TOKEN') == null || $cookieStore.get('XSRF-TOKEN') == "") {
rejection.status = 403;
}
不是通过DI提供的,因此您不能提供双精度货币。ChangeDetectorRef
与提供的组件不同,因此您不能使用它。fixture.changeDetectorRef
将在每次调用时创建私有类fixture.debugElement.injector.get(ChangeDetectorRef)
(公共类ViewRef
只是ViewRef
的别名)的新实例,然后提供给组件的对象是另一个。所以我的解决方法是:
ViewRef$1