2015-07-08 11 views
8

Ich verwende die expect.js-Bibliothek mit meinen Mocha-Unit-Tests. Derzeit bin ich erfordern die Bibliothek in der ersten Zeile jeder Datei, wie folgt aus:So fordern Sie Module aus der Datei mocha.opts ordnungsgemäß an

var expect = require('expect.js'); 

describe('something', function() { 
    it('should pass', function() { 
     expect(true).to.be(true); // works 
    }); 
}); 

Wenn möglich, würde ich den Standardcode erfordern entfernen möchten von der ersten Zeile jeder Datei und habe meine Unit Tests magisch über expect wissen. Ich dachte, ich könnte in der Lage sein, dies die mocha.opts-Datei zu tun:

--require ./node_modules/expect.js/index.js 

Aber jetzt bekomme ich folgende Fehlermeldung, wenn mein Test ausgeführt wird:

ReferenceError: expect is not defined

Dies scheint Sinn zu machen - wie kann es wissen dass sich der Verweis auf expect in meinen Tests bezieht, was von der expect.js-Bibliothek exportiert wird?

Die erwarten Bibliothek wird auf jeden Fall immer geladen, als ob ich den Weg zu etwas nicht existent dann Mokka sagt ändern:

"Error: Cannot find module './does-not-exist.js'"

Gibt es eine Möglichkeit zu erreichen, was ich will? Ich führe meine Tests von einer Schluckaufgabe, wenn das vielleicht helfen könnte.

Antwort

13

Sie benötigen das Modul ordnungsgemäß, aber wie Sie herausgefunden haben, werden die Symbole, die der Modul-Export findet, nicht automatisch im globalen Bereich gefunden. Sie können dies mit Ihrem eigenen Hilfsmodul beheben.

erstellen test/helper.js:

var expect = require("expect.js") 

global.expect = expect; 

und stellen Sie Ihre test/mocha.opts zu:

--require test/helper 
2

Während Louis Antwort ist vor Ort auf, am Ende habe ich dies mit einem anderen Ansatz gelöst durch Karma und den von karma-chai Plugin:

Install:

npm install karma-chai --save-dev 

konfigurieren:

karma.set({ 

    frameworks: ['mocha', 'chai'] 
    // ... 
}); 

Verwendung:

describe('something', function() { 
    it('should pass', function() { 
     expect(true).to.be(true); // works 
    }); 
}); 
0

Dank Louis Antwort und ein wenig das Hantieren ich meine Testumgebung Referenzen mocha.opts mit aussortiert. Hier ist das komplette Setup.

Mein Projekt ist eine Legacy-JavaScript-Anwendung mit vielen "plain" js-Dateien, die ich in einer HTML-Datei mit Skript-Tags referenzieren möchte und für Unit-Tests mit Mocha benötigt.

Ich bin nicht sicher, dass dies eine gute Praxis ist, aber ich bin Mocha für Unit-Tests in Node-Projekt verwendet und war bestrebt, das gleiche Tool mit minimaler Anpassung zu verwenden.

fand ich, dass Export ist einfach:

class Foo{...} 
class Bar{...} 
if (typeof module !== 'undefined') module.exports = { Foo, Bar }; 

oder

class Buzz{...} 
if (typeof module !== 'undefined') module.exports = Buzz; 

jedoch zu verwenden versuchen, erfordern in allen Dateien wurde ein Problem, da der Browser würde über Variablen beklagen sogar wird bereits erklärt wenn sie in einem if-Block eingeschlossen sind, wie zum Beispiel:

if (typeof require !== 'undefined') { 
    var {Foo,Bar} = require('./foobar.js');  
} 

Also habe ich die re los Fordern Sie einen Teil in den Dateien auf und richten Sie eine mocha.opts-Datei in meinem Testordner mit diesem Inhalt ein. Die Wege sind relativ zu dem Stammverzeichnis:

--require test/mocha.opts.js 

mocha.opts.js Inhalt. Die Pfade sind relativ zum Speicherort der Datei:

global.assert = require('assert'); 
global.Foo = require("../foobar.js").Foo; 
global.Bar = require("../foobar.js").Bar; 
global.Buzz = require("../buzz.js"); 
Verwandte Themen