【发布时间】:2016-04-04 07:56:39
【问题描述】:
我现在花了几个小时来搜索一个用于在 nodejs 中模拟外部 api 的库。我已经尝试过 SinonJS 库,但它似乎不适用于外部网络调用......有人知道另一个允许模拟外部网络调用的库吗?或者有人有 SinonJS 的工作示例吗?
感谢您的每一个回答!
您可以在下面找到我的代码。
我使用 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');
});
});
产品API:
import restClient from './RestClient';
/**
*
* Returns a list of products
* @param query
* @returns {ProductDTOs}
*/
function _searchForProducts(query) {
return restClient().get(
`/myresource`
);
}
RestClient(使用 Axios):
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可以满足您的所有需求。 -
嗨,Alexander,我现在添加了我的代码。问题是我没有收到来自我的假服务器的任何响应
标签: javascript node.js unit-testing sinon