2017-06-05 2 views
2

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.

Antwort

1

Sie müssen die should method rufen alle hinzufügen am Anfang

let should = chai.should(); 
Prototyp sollte
Verwandte Themen