您如何验证请求是使用 axios-mock-adapter 发出的?
How do you verify that a request was made with axios-mock-adapter?
我正在使用https://github.com/ctimmerm/axios-mock-adapter
我想知道如何验证被测系统是否实际调用了端点。
在这个例子中:
var axios = require('axios');
var MockAdapter = require('axios-mock-adapter');
// This sets the mock adapter on the default instance
var mock = new MockAdapter(axios);
// Mock any GET request to /users
// arguments for reply are (status, data, headers)
mock.onGet('/users').reply(200, {
users: [
{ id: 1, name: 'John Smith' }
]
});
我如何判断是否调用了“/users”?
我正在寻找类似于您可以在 Jest 中执行的操作:
expect(mockFunc).toHaveBeenCalledTimes(1)
我意识到我可以在使用函数回复时使用一些自定义逻辑,并设置一个本地变量来指示请求是否已发出。我只是想知道是否有更简洁的方法来做到这一点。
注意:此答案现已过时,请参阅 Laszlo Sarvold 的 。
axios-mock-adapter 似乎没有内置此功能,但是如果您使用的是 jest,则可以使用 jest.spyOn.
对于上面的示例
let spy = jest.spyOn(axios, "get");
//run http request here
expect(spy).toHaveBeenCalled();
注意:根据您使用的内容,您可能必须将 expect 语句包装在 setTimeout(function, 0) 中才能正常工作
另一种选择是
//OP's Code
var axios = require('axios');
var MockAdapter = require('axios-mock-adapter');
// This sets the mock adapter on the default instance
var mock = new MockAdapter(axios);
// Mock any GET request to /users
// arguments for reply are (status, data, headers)
mock.onGet('/users').reply(200, {
users: [
{ id: 1, name: 'John Smith' }
]
});
const spy = jest.spyOn(mock, 'onGet');
//function call here
expect(spy).toHaveBeenCalledWith('/users')
本质上,由于模拟“拦截”了 axios 调用,因此您无法测试 axios.get 调用.. 因为它从未真正发生过。但是 mock.onGet 函数确实被执行了,您也可以验证使用的是什么路由。
在模拟 axios 时试图监视它会得到如下所示的错误
expect(jest.fn()).toHaveBeenCalledWith(...expected)
Expected: "/users"
Number of calls: 0
干杯。
根据 https://github.com/ctimmerm/axios-mock-adapter,有一个开箱即用的功能用于验证请求调用:
expect(mock.history.post.length).toBe(1); // times called
expect(mock.history.post[0].data).toBe(JSON.stringify({ foo: "bar" })); // posted object
我正在使用https://github.com/ctimmerm/axios-mock-adapter
我想知道如何验证被测系统是否实际调用了端点。
在这个例子中:
var axios = require('axios');
var MockAdapter = require('axios-mock-adapter');
// This sets the mock adapter on the default instance
var mock = new MockAdapter(axios);
// Mock any GET request to /users
// arguments for reply are (status, data, headers)
mock.onGet('/users').reply(200, {
users: [
{ id: 1, name: 'John Smith' }
]
});
我如何判断是否调用了“/users”?
我正在寻找类似于您可以在 Jest 中执行的操作:
expect(mockFunc).toHaveBeenCalledTimes(1)
我意识到我可以在使用函数回复时使用一些自定义逻辑,并设置一个本地变量来指示请求是否已发出。我只是想知道是否有更简洁的方法来做到这一点。
注意:此答案现已过时,请参阅 Laszlo Sarvold 的
axios-mock-adapter 似乎没有内置此功能,但是如果您使用的是 jest,则可以使用 jest.spyOn.
对于上面的示例
let spy = jest.spyOn(axios, "get");
//run http request here
expect(spy).toHaveBeenCalled();
注意:根据您使用的内容,您可能必须将 expect 语句包装在 setTimeout(function, 0) 中才能正常工作
另一种选择是
//OP's Code
var axios = require('axios');
var MockAdapter = require('axios-mock-adapter');
// This sets the mock adapter on the default instance
var mock = new MockAdapter(axios);
// Mock any GET request to /users
// arguments for reply are (status, data, headers)
mock.onGet('/users').reply(200, {
users: [
{ id: 1, name: 'John Smith' }
]
});
const spy = jest.spyOn(mock, 'onGet');
//function call here
expect(spy).toHaveBeenCalledWith('/users')
本质上,由于模拟“拦截”了 axios 调用,因此您无法测试 axios.get 调用.. 因为它从未真正发生过。但是 mock.onGet 函数确实被执行了,您也可以验证使用的是什么路由。
在模拟 axios 时试图监视它会得到如下所示的错误
expect(jest.fn()).toHaveBeenCalledWith(...expected)
Expected: "/users"
Number of calls: 0
干杯。
根据 https://github.com/ctimmerm/axios-mock-adapter,有一个开箱即用的功能用于验证请求调用:
expect(mock.history.post.length).toBe(1); // times called
expect(mock.history.post[0].data).toBe(JSON.stringify({ foo: "bar" })); // posted object