我几天都在努力弄清楚如何正确测试这段代码:(
const request = require('superagent');
const getDog = () => {
return request.get('https://dog.ceo/api/breeds/image/random');
};
it('resolves', () => {
// Expect mocked response
});
it('rejects', () => {
// Expect mocked response
});
答案 0 :(得分:3)
在大多数情况下,您的代码会从API中获取一些价值来解析它并使用它来制作一些东西
因此,您不希望进行真正的API调用并改为模拟它
有几种方法可以做到这一点。其中一种可能是模拟superagent
库上的唯一方法。
// tell jest not to mock superagent because we'll mock the only method
jest.unmock('superagent');
const request = require('superagent');
const getDog = () => {
return request.get('https://dog.ceo/api/breeds/image/random');
};
it('resolves', () => {
// mock the get request to resolve object
request.get = jest.fn().mockResolvedValue({
message: 'Your message'
});
// Expect mocked response
expect.assertions(1);
return expect(getDog()).resolves.toEqual({
message: 'Your message'
});
});
it('rejects', () => {
// mock the get request to reject object
request.get = jest.fn().mockRejectedValue({
message: 'Your error'
});
// Expect mocked response
expect.assertions(1);
return expect(getDog()).rejects.toEqual({
message: 'Your error'
});
});
我使用expect.assertions(1)
,有reason:
这在测试异步代码时通常很有用 确保回调中的断言实际上已被调用。
有些链接可以帮助您: mockFn.mockResolvedValue(value) , .rejects
答案 1 :(得分:0)
一种解决方案是使用诸如nock或fetch-mock之类的库来模拟对您的请求的HTTP响应。