Wie exportierte Funktion in ES6 stub?
Habe ich die Datei foo.js:
export function bar (m) {
console.log(m);
}
Und eine weitere Datei, die verwendet foo.js, cap.js:
import { bar } from 'foo';
export default m => {
//Some logic that I need to test
bar(m);
}
Habe ich test.js:
import cap from 'cap'
describe('cap', () => {
it('should bar', () => {
cap('some');
});
});
Irgendwie muss ich überschreiben Umsetzung von bar(m)
im test. Gibt es eine Möglichkeit, dies zu tun?
P. S. ich benutze babel, webpack und Mokka.
InformationsquelleAutor der Frage Mike Chaliy | 2016-01-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
AUA.. ich Lösung gefunden, so dass ich mit
sinon
stub undimport * as foo from 'foo'
zu bekommen-Objekt mit allen exportierten Funktionen, so kann ich die stub.InformationsquelleAutor der Antwort Mike Chaliy
Können Sie ersetzen/umschreiben/stub-Exporte nur innerhalb des Moduls selbst. (Hier ist ein Erklärung)
Wenn Sie schreiben Sie 'foo.js' wie diese:
Können Sie dann überschreiben Sie in Ihrer Prüfung wie folgt:
Habe ich einen Babel-plugin, verwandelt alle, die Exporte automatisch, so dass Sie können werden durch Stubs ersetzt: https://github.com/asapach/babel-plugin-rewire-exports
InformationsquelleAutor der Antwort DreamSonic
Können Sie babel-plugin-rewire (
npm install --save-dev babel-plugin-rewire
)Und dann in
test.js
verwenden Sie die__Rewire__
Funktion auf das importierte Modul zu ersetzen, um die Funktion in das Modul:Werden Sie sicher, dass Sie
rewire
zu Ihrem babel-plugins in.babelrc
:Schließlich, wie Sie sehen können die
babel-plugin-rewire
plugin ist nur aktiviert, in der test-Umgebung, so sollten Sie rufen Sie test runner mit derBABEL_ENV
Umgebungsvariable auftest
(was Sie wahrscheinlich tun es schon):Hinweis: ich konnte nicht
babel-plugin-rewire-exports
zu arbeiten.InformationsquelleAutor der Antwort qff
Während @Mike-Lösung funktioniert in den alten Versionen von sinon, es wurde entfernt, da sinon 3.0.0.
Nun anstelle von:
sollten Sie tun:
Beispiel von mocking google oauth api:
InformationsquelleAutor der Antwort Daniel Conde Marin