无论何时在任何测试中调用它,我都试图监视服务,因此请创建一个模拟程序:
import { SpyObject } from './spyobject';
import { TranslateService } from '@ngx-translate/core';
export class MockTranslateService extends SpyObject {
constructor() {
super(TranslateService);
this.spy('instant').andReturn('');
}
}
我这样提供:
{
provide: TranslateService,
useValue: MockTranslateService,
},
我的组件使用this.translateService.instant
并获得:TypeError: this.translateService.instant is not a function
。
另一方面,当我在组件中登录translateService时,会得到:
class MockTranslateService extends spyobject_1.SpyObject {
constructor() {
super(core_1.TranslateService);
this.spy('instant').andReturn(this);
}
}
知道间谍为什么不起作用吗?预先感谢。
答案 0 :(得分:0)
要使this.spy('instant')
工作,您需要一个监视功能。这将起作用:
export class MockTranslateService extends SpyObject {
constructor() {
super(TranslateService);
this.spy('instant').andReturn('');
}
public instant() { }
}
由于已经定义了instant
函数,因此可以添加间谍。
编辑,这可能会更容易。在beforeEach
块中,执行以下操作:
beforeEach(() => {
spyOn(TranslateService.prototype, 'instant');
});
这会将间谍直接放置在原型上,并在每次测试后清理干净。
答案 1 :(得分:0)
问题出在我在测试配置中提供模拟的方式上,应该是这样的:
{
provide: TranslateService,
useValue: new MockTranslateService(),
},
我不完全理解为什么,有时其他语法起作用,有时不起作用,我认为这与Typescript处理类型有关。