为什么 jasmine 会监视 return 一个函数?
why jasmine spy return a function?
我开始摆弄 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)
});
})
我声明没有 testBed 或没有 spy 的 testBed 我可以测试。
但是当我使用间谍 errorsServiceSpy.getErrors.toString ()
应该 return 一个字符串数组时,它 return 是一个函数:'
function() {
return fn.apply(this, arguments);
}
查看 stackblitz!
中的所有代码
由于 'this.errorsService',请不要关注失败的测试我认为这是一个 stackblitz 问题
为什么它return我一个函数?如何测试服务的方法? WHit testBed 和间谍?
如果您需要更多详细信息,我随时为您服务
你想错了,你不想得到错误,你想知道你的方法是否被调用了一个特定的参数,所以:
let errors:any = errorsServiceSpy.getErrors.toString()
expect(errorsServiceSpy.getErrors.toString()).toContain(error)
应该是:
expect(errorsServiceSpy.getErrors).toHaveBeenCalledWith(error);
虽然您实际上并没有展示 getErrors
的作用,但实际实施会有所不同。我建议你 read the docs
另外请与代码中的分号保持一致
我开始摆弄 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)
});
})
我声明没有 testBed 或没有 spy 的 testBed 我可以测试。
但是当我使用间谍 errorsServiceSpy.getErrors.toString ()
应该 return 一个字符串数组时,它 return 是一个函数:'
function() {
return fn.apply(this, arguments);
}
查看 stackblitz!
中的所有代码
由于 'this.errorsService',请不要关注失败的测试我认为这是一个 stackblitz 问题
为什么它return我一个函数?如何测试服务的方法? WHit testBed 和间谍?
如果您需要更多详细信息,我随时为您服务
你想错了,你不想得到错误,你想知道你的方法是否被调用了一个特定的参数,所以:
let errors:any = errorsServiceSpy.getErrors.toString()
expect(errorsServiceSpy.getErrors.toString()).toContain(error)
应该是:
expect(errorsServiceSpy.getErrors).toHaveBeenCalledWith(error);
虽然您实际上并没有展示 getErrors
的作用,但实际实施会有所不同。我建议你 read the docs
另外请与代码中的分号保持一致