ich einen sehr einfachen Unit-Test habe, die wie folgt aussieht:Mocking Methoden in Jest
import ApiWrapper from '../../services/api_wrapper';
jest.unmock('../helper')
describe('Helper',() => {
let Helper;
beforeEach(() => {
Helper = require('../helper').default;
});
it('calls the Api Wrapper',() => {
Helper.help()
expect(ApiWrapper.help).toHaveBeenCalled();
});
});
Wo Helper sieht wie folgt aus:
import ApiWrapper from '../services/api_wrapper'
class Helper {
help() {
ApiWrapper.help()
}
}
export default new Helper();
Und ApiWrapper sieht wie folgt aus:
class ApiWrapper {
static help() {
console.log('help!')
}
}
export default ApiWrapper;
ApiWrapper.help() wird von Jest verspottet, also 'Hilfe!' wird nie gedruckt, aber die Erwartung im Test schlägt fehl. Dies scheitert nach wie vor, wenn wir ApiWrapper umschreiben nur ein einfaches Javascript-Objekt wie so sein:
export default {
help:() => { console.log('help!'); }
}
Es funktioniert aber, wenn wir die Importe in der Spezifikation zu ändern (so wird ApiWrapper in der before importiert), und schreiben ApiWrapper
class ApiWrapper {
help() {
console.log('help!');
}
}();
export default new ApiWrapper();
Was ist es über Jest spöttisches Verhalten, das dies ermöglicht: eine Singleton-Klasse, wie so zu sein?
Einige weitere Informationen im Thread, woher diese Frage: https://github.com/facebook/jest/issues/1245 – eebbesen