我的组件中有各种方法订阅注入(inject)依赖项中的方法,这些方法返回可观察对象。
我想编写 Jest 单元测试以确保当这些可观察对象返回/错误时,我的方法会做正确的事情。
在下面的示例中,我正在尝试编写一个测试来检查 doAThing
已经开除了。以下测试均无效。他们都因错误而失败,例如
'returnMyObservable.subscribe is not a function'.
// Example method to test component
public testFunction (): void {
this.myService.returnMyObservable.subscribe(
( value ) => this.doAThing( value )
)
}
describe( 'myComponemt', () => {
let fixture;
let myServiceMock;
beforeEach( () => {
myServiceMock = {
returnMyObservable: fn()
}
fixture = new myComponent( myServiceMock );
});
// 1) I have tried mocking with a returned value
it ( 'should call do a thing when value is returned', () => {
myServiceMock.returnMyOnservable.mockReturnValue( true );
fixture.testFunction();
expect( fixture.doAThing ).toHaveBeenCalled();
});
// 2) I have tried returning an observable
it ( 'should call do a thing when value is returned', () => {
myServiceMock.returnMyOnservable.mockReturnValue( of( true ) );
fixture.testFunction();
expect( fixture.doAThing ).toHaveBeenCalled();
});
});
最佳答案
我还有一些其他错误掩盖了我的测试实际出了什么问题——我发现测试上述功能的最佳方法是:
describe( 'MyComponent', () => {
let fixture;
let myServiceMock;
beforeEach( () => {
myServiceMock = {
returnMyObservable: jest.fn()
}
fixture = new MyComponent( myServiceMock );
});
it ( 'should call doAThing when value is returned', () => {
const doAThingSpy = jest.spyOn( fixture, 'doAThing' );
myServiceMock.returnMyObservable.mockReturnValue( of( true ) );
fixture.testFunction();
expect( doAThingSpy ).toHaveBeenCalledWith( true );
});
});
(这与 Jasmine 中的做法几乎相同)
关于typescript - 在 Jest 中,我如何对订阅 observable 的方法进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58815471/