이제 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');
});
});
ProductAPI :
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;
내 문제를 발견했습니다. 일부 서버 구성을 잊어 버렸습니다. 서버를 실행하려면 autoRespond 속성을 true로 설정해야했습니다.
before(function () {
server = sinon.fakeServer.create();
server.respondWith(
"GET",
"https://ec2-52-58-48-214.eu-central-1.compute.amazonaws.com/mspocc/v2/msp/products/search?query=tv&fields=FULL",
[200, { "Content-Type": "application/json" }, JSON.stringify(emptyResults)]
);
server.autoRespond = true
});
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다