我花了几个小时来搜索一个库来模拟nodejs中的外部API。我已经尝试过SinonJS库,但它似乎不适用于外部网络调用...有没有人知道另一个允许嘲笑外部网络调用的库?或者有人对SinonJS有一个可行的例子吗?在NodeJs中嘲弄外部API进行单元测试
谢谢你的每一个答案!
下面你可以找到我的代码。
我的单元测试与SinonJS:
import expect from 'expect';
import { searchForProducts } from 'api/ProductAPI';
import emptyResults from 'api/ProductAPI_EmptyResult.json';
describe('ProductAPI',() => {
let server;
before(function() {
server = sinon.fakeServer.create();
server.respondWith(
"GET",
"https://my.domain.com/myresource",
[200, { "Content-Type": "application/json" }, JSON.stringify(emptyResults)]
);
});
it('product search with working API ',() => {
server.respond();
searchForProducts('tv').then(
(data) => {
console.log('success');
},
(error) => {
console.log('error');
});
//dummy expect
expect(
'test'
).toEqual('test');
});
});
ProductAPI:
import restClient from './RestClient';
/**
*
* Returns a list of products
* @param query
* @returns {ProductDTOs}
*/
function _searchForProducts(query) {
return restClient().get(
`/myresource`
);
}
RESTClient实现(与爱可信):
import Axios from 'axios';
const restClient = function restClient() {
let axios;
let apiUrl;
function _url(url) {
return `${apiUrl}${url}`;
}
function _get(url) {
return axios({
method: 'GET',
url: _url(url),
});
}
function _post(url, data) {
return axios({
method: 'POST',
url: _url(url), data,
});
}
function _put(url, data) {
return axios({
method: 'PUT',
url: _url(url), data,
});
}
function _patch(url, data) {
return axios({
method: 'PATCH',
url: _url(url),
data,
});
}
function _delete(url, data) {
return axios({
method: 'DELETE',
url: _url(url), data,
});
}
function _setDefaultHeaders() {
axios.defaults.headers.post['Content-Type'] = 'application/json';
axios.defaults.headers.common['Accept'] = 'application/json';
}
function _setAuthorizationHeader(token) {
axios.defaults.headers.common['Authorization'] = `Bearer ${token}`;
}
function _removeAuthorizationHeader() {
axios.defaults.headers.common['Authorization'] = '';
}
function _setup() {
axios = Axios;
apiUrl = 'https://my.domain.com';
_setDefaultHeaders();
}
_setup();
return {
setup: _setup,
url: _url,
get: _get,
post: _post,
put: _put,
patch: _patch,
delete: _delete,
setDefaultHeaders: _setDefaultHeaders,
setAuthorizationHeader: _setAuthorizationHeader,
removeAuthorizationHeader: _removeAuthorizationHeader,
};
};
export default restClient;
什么不起作用?显示你的代码。 'sinon'可以做你需要的一切。 – alexmac
嗨,亚历山大,我现在添加了我的代码。问题是我没有收到我的假服务器的任何回应 – user3836726