Ich verwende die Proxyquire-Bibliothek, die Pakete beim Import sperrt.Anforderung, die sich nicht wie erwartet verhält
Ich bin meine eigene proxyquire Funktion zu schaffen, die eine Vielzahl von Paketen Stümpfe ich regelmäßig und wollen regelmäßig (Meteor-Pakete, die eine spezielle Import Syntax) Stub:
// myProxyquire.js
import proxyquire from 'proxyquire';
const importsToStub = {
'meteor/meteor': { Meteor: { defer:() => {} } },
};
const myProxyquire = filePath => proxyquire(filePath, importsToStub);
export default myProxyquire;
Jetzt möchte ich schreiben einen Test einer Datei, die eines dieser Pakete verwendet:
// src/foo.js
import { Meteor } from 'meteor/meteor'; // This import should be stubbed
export const foo =() => {
Meteor.defer(() => console.log('hi')); // This call should be stubbed
return 'bar';
};
Und ich es endlich testen wie folgt aus:
// src/foo.test.js
import myProxyquire from '../myProxyquire';
// This should be looking in the `src` folder
const { foo } = myProxyquire('./foo'); // error: ENOENT: no such file
describe('foo',() => {
it("should return 'bar'",() => {
expect(foo()).to.equal('bar');
});
});
Beachten Sie, dass meine letzten 2 Dateien in einem Unterordner src
geschachtelt sind. Also, wenn ich versuche, diesen Test zu starten, bekomme ich eine Fehlermeldung, dass das Modul ./foo
nicht gefunden werden konnte, da es im Verzeichnis "root" gesucht wird, wo die myProxyquire.js
Datei ist, nicht das src
Verzeichnis wie erwartet.
Wenn Sie den Aufruf von 'proxyquire' durch ein reguläres' require' ersetzt haben, haben Sie das gleiche Problem, weil 'require' funktioniert: Es lädt Dateien relativ zu der Datei _die den Aufruf von' require' enthält _, das ist in deinem Fall 'myProxyquire.js' – robertklep
Das ist, was ich auch dachte, gibt es einen Weg um dies? –