2016-07-19 10 views
0

Ich habe den folgenden Code in einer eigenen Datei shared.jsgemeinsame Funktionalität in Mokka Tests

afterEach(function() { 
    // insert code 
}); 

var foo; 

beforeEach(function() { 
    foo = { 
    bar: [] 
    }; 
}); 

exports = module.exports = {}; 
exports.foo = foo; 

rief ich die afterEach und beforeEach mag Ich habe in jedem mocha.js Test lief werden. Also in jeder Testdatei, ich benötigte shared.js. Das Problem ist, es scheint foo ist nicht im Rahmen meiner Tests verfügbar. foo.bar ist nicht definiert und nicht zugänglich. Die beforeEach() und afterEach Hooks sind in Ordnung, aber ich habe Probleme zu verstehen, wie Sie den Umfang von foo ordnungsgemäß exportieren. Dies könnte eher ein Node.js-Problem als ein tatsächliches Mocha-Problem sein.

Antwort

4

Das Problem besteht darin, dass Sie die exportierte Referenz nicht ändern können. In Ihrem Fall exportieren Sie undefined, weil foo nicht initialisiert ist. Wenn Sie foo mit einem leeren Objekt initialisieren und später versuchen, es einem anderen Objekt zuzuordnen, funktioniert es immer noch nicht, da die exportierte Referenz immer noch dieselbe ist.

Das einzige, was Sie tun können, ist zu modifizieren (mutiert), um das exportierte Objekt wie folgt:

afterEach(function() { 
    // insert code 
}); 

var foo = {}; 

beforeEach(function() { 
    foo.bar = []; 
}); 

exports = module.exports = {}; 
exports.foo = foo; 
+0

sollte 'foo .bar 'letztlich dann in jeder Datei, die ich' require 'dies in? Weil ich versuche, 'foo.bar.push ({});' in meinem Test, der diese freigegebene Datei erfordert und ich bekomme 'foo ist nicht definiert ' – randombits

+0

@randombits Sie müssen das Ergebnis erfordern, um eine Variable zu sein kann auf die exportierten Daten zugreifen. z.B. 'var shared = require (" ./ shared ");' Dann kannst du über 'shared.foo' auf foo in deinem Modul zugreifen. – vincent

0

Wenn Sie wollen etwas, das auf den Kontext der einzelnen Tests spezifisch ist, Sie so etwas wie folgendes tun:

afterEach(function() { 
    // insert code 
}); 

beforeEach(function() { 
    this.foo = []; 
}); 

exports = module.exports = {}; 

kann jeder Test zugreifen dann seine eigene this.foo:

describe('myTest', function() { 
    it('should do something', function() { 
    this.foo.push("1"); // same 'this' as from beforeEach 
    // ...insert code 
    }) 
})