Javascript 为什么jasmine spy返回函数?

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

我开始和jasmine乱搞,但我遇到了以下代码的问题:

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);
}