Ich verbringe jetzt einige Stunden für das Durchsuchen einer Bibliothek für Spott eine externe API in Nodejs. Ich habe bereits die SinonJS-Bibliothek ausprobiert, aber es scheint nicht für externe Web-Anrufe zu funktionieren ... Kennt jemand eine andere Bibliothek, die das Spotten externer Web-Anrufe erlaubt? Oder hat jemand ein funktionierendes Beispiel für SinonJS?Mocking externe API für Komponententests in NodeJs
Vielen Dank für jede Antwort!
Unten finden Sie meinen Code.
My Unit Test mit 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 (mit 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;
Was funktioniert nicht? Zeigen Sie Ihren Code. 'sinon' kann alles tun was du brauchst. – alexmac
Hallo Alexander, ich habe jetzt meinen Code hinzugefügt. Das Problem ist, dass ich keine Antwort von meinem falschen Server – user3836726