Javascript 为什么jasmine spy返回函数?
我开始和jasmine乱搞,但我遇到了以下代码的问题:Javascript 为什么jasmine spy返回函数?,javascript,unit-testing,jasmine,spy,Javascript,Unit Testing,Jasmine,Spy,我开始和jasmine乱搞,但我遇到了以下代码的问题: describe('UserService with errorsServiceSpy and testbed', () => { //how to test service that depends by another service let userService: UserService; let errorsServiceSpy: jasmine.SpyObj<ErrorsHandlerServ
describe('UserService with errorsServiceSpy and testbed', () => {
//how to test service that depends by another service
let userService: UserService;
let errorsServiceSpy: jasmine.SpyObj<ErrorsHandlerService>;
beforeEach(() => {
const spy = jasmine.createSpyObj('ErrorsHandleService', ['getErrors', 'addError']);
TestBed.configureTestingModule({
providers: [
UserService, { provide: ErrorsHandlerService, useValue: spy }
]
});
userService = TestBed.inject(UserService);
errorsServiceSpy = TestBed.inject(ErrorsHandlerService) as jasmine.SpyObj<ErrorsHandlerService>;
});
it('should be created', () => {
expect(userService).toBeTruthy();
});
it('should return user', () => {
expect(userService.getUser).toBe(userService.user)
})
it('#getErrors should return #error value from a spy', () => {
const error:string = 'prova errore';
userService.generateError(error)
let errors:any = errorsServiceSpy.getErrors.toString()
console.log('errors', errors)
expect(errorsServiceSpy.getErrors.toString()).toContain(error)
});
})
请看下面的所有代码不要注意由于“this.errorsService”而导致的测试失败,我认为这是一个stackblitz问题 为什么它会返回一个函数?如何测试服务的方法?什么是试验台和间谍?
如果您需要更多详细信息,我完全听命于您如果您认为它是错误的,您不想得到错误,您想知道您的方法是否已使用特定参数调用,因此:
let errors:any=errorsServiceSpy.getErrors.toString()
expect(errorsServiceSpy.getErrors.toString()).toContain(错误)
应该是:
expect(errorsServiceSpy.getErrors).toHaveBeenCalledWith(error);
虽然您没有实际显示getErrors
所做的事情,但是实际的实现会有所不同。我建议你
另外,请与代码中的分号保持一致这里很不清楚您想要实现什么,您想知道您测试的代码中是否调用了
errorsServiceSpy.getErrors
?这是因为您的spy与原始实现无关,所有这些方法都是mocked@Liam是,它被调用并返回afunction@yurzui这就是我想的。。。所以间谍与服务无关!没用?不,没用@AndreaDiCioccio。它允许您注入依赖项并测试实现细节。我想做的测试是验证getErrors是否实际返回生成的错误。这没有意义,errorsServiceSpy
是一个间谍,它只返回您告诉它返回的内容。您不需要测试间谍/模拟,间谍/模拟是硬编码的功能,允许您测试其他东西。如果你想让它真正做点什么,你必须注入这个测试的真正实现,而不是一个spy.ho corretto il test suggerito in expect(errorsServiceSpy.addError)。Tohaven beencalled with(error)e funzionalool原谅我!滑倒!我明白你想告诉我什么。。。这不是我必须要做的测试…事实上,如果你看一下stackblitz中的代码,还有其他测试注入了服务本身。好啊非常感谢。
function() {
return fn.apply(this, arguments);
}