ContextTesting mit Knoten, Mokka und chai (sollte/BDD-Syntax)
Ich bin ein Bastler JavaScript und mein Projekt auf die nächste Stufe zu nehmen, ich bin in BitBucket eine Pipeline zu gründen versucht das wird meine Komponententests ausführen (und andere Dinge später tun).
Ich already used Mocha and Chai zum Testen, aber ich verwendete es im Browser mit einer HTML-Seite, die die Abhängigkeiten eingerichtet und führt die Tests.
Problem
Das Problem, das ich mit Blick auf bin ist, dass ich nicht die should
Syntax in Knoten bekommen zu arbeiten, während ich vor im Browser arbeiten Tests habe. should
sollte als Teil der Chai-Bibliothek verfügbar sein.
Ich initialisiert ein neues Projekt mit minimalen Code drin, aber hier funktioniert es auch nicht: should
ist einfach nicht zugewiesen.
package.json, einschließlich Mokka und Chai, und Mokka zum Testen einrichten.
{
"name": "testtest",
"version": "1.0.0",
"description": "Minimal, complete and verifiable example",
"main": "index.js",
"dependencies": {},
"devDependencies": {
"chai": "^4.0.1",
"mocha": "^3.4.2"
},
"scripts": {
"test": "mocha -u bdd"
},
"author": "GolezTrol",
"license": "ISC"
}
Test/Test-foo.js, den Test enthält. Das einzige, was ich hinzugefügt habe, ist die erste Zeile mit require
. Zuvor enthielt der Browser die Datei und Foo war global. Ich echote sut, gib mir 5 und sut.sollte mich undefined geben.
var Foo = require('../src/foo.js').Foo;
describe('Foo', function(){
it('should flurp gnip snop', function() {
var sut = Foo.flurp();
console.log(sut); // 5
console.log(sut.should); // undefined
sut.should.be.closeTo(5.00000, 0.00001);
});
});
src/foo.js, die tatsächliche Einheit getestet. Im alten Setup wäre Foo global (oder fügt sich selbst als Eigenschaft zu einem anderen globalen hinzu, aber das ist jetzt irrelevant). Ich habe das geändert, also wird es als exports.Foo
exportiert, also kann ich require
es. Das funktioniert grundsätzlich, weil ich im Test "5" bekomme.
exports.Foo = function(){}; // Export Foo
var Foo = exports.Foo;
// Give Foo a method
Foo.flurp = function(){
return 5;
}
Der Ausgang I aus dem Test zeigt 'Foo' erhalten (die beschreibt), 5 (das protokollierte Ergebnis) und spezifiziert (der angemeldete Wert von sut.should). Danach zeigt es offensichtlich die formale Ausgabe, dass der Test nicht bestanden hat:
Foo
5
undefined
<clipped for brevity>
1) Foo should flurp gnip snop:
TypeError: Cannot read property 'be' of undefined
at Context.<anonymous> (test\test-foo.js:9:15)
Alternative
ich alle vorhandenen Unit-Tests ändern kann, indem Sie diese Zeile:
var expect = require('chai').expect;
und Ändern der Syntax des Assert zu
Dies ist eine praktikable Alternative, da ich nur ein paar Dutzend Tests erhielt. Aber ich bin immer noch daran interessiert, eine Antwort auf die obige Frage zu finden.