Wie Schreibe ich eine Jasmin-test für eine Methode, enthält eine Globale variable von einer anderen Klasse/Datei?
Meinen tests fehl aus folgendem Grund:
ReferenceError: Can ' T find variable: moving_canvas_context in der Datei
(Zeile 5)
Ich den Grund verstehen, der test ist fehlerhaft. Es versteht nicht die variable, da es definiert ist in einer separaten javascript-Datei. Es ist jedoch Global definiert und funktioniert in der Realität.
Wie Schreibe ich eine Jasmin-test für diese clear_canvas Funktion?
JavaScript Canvas_actions:
(function() {
window.Canvas_Actions = (function() {
function Canvas_Actions() {}
Canvas_Actions.prototype.clear_canvas = function() {
moving_canvas_context.clearRect(0, 0, moving_canvas.width, moving_canvas.height);
main_canvas_context.drawImage(window.background_image, 0, 0, main_canvas.width, main_canvas.height);
return window.canvas_objects = [];
};
return Canvas_Actions;
})();
}).call(this);
Jasmin-Test für Canvas_actions:
(function() {
describe('Canvas Actions', function() {
return describe('clear_canvas', function() {
return it('clears the canvases and deletes all objects', function() {
var actions;
jasmine.getFixtures().fixturesPath = "../spec/javascript/fixtures";
loadFixtures("canvas_fixture.html");
actions = new Canvas_Actions();
actions.clear_canvas();
return expect(canvas_objects).toEqual([]);
});
});
});
}).call(this);
InformationsquelleAutor John | 2011-11-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gut, es muss auch erklärt werden, wenn der test ausgeführt wird. Also bist du wahrscheinlich fehlt ein Verweis auf das script, wo es definiert ist, in der Test-fixture html.
Auch, Globale Variablen sind in der Regel nicht eine gute Idee, Sie in der Regel schwer, Fehler. Da bist du schon mit jasmine als Testframework, versuchen Sie zu abstrahieren und die Abhängigkeit, dass die Globale variable in etwas, das Sie passieren, um Ihren code unter test. Dann verwenden Sie jasmine ' s Spott-Fähigkeiten, um es zu testen.
Wenn Sie entfernen die Globale Verweise von
Canvas_Actions
, könnte es so Aussehen:Können Sie verhöhnen die
canvas
argument mit Jasmin und testCanvas_Actions
isoliert.Wie kann angemerkt werden, dieser code kann unearth eine
Canvas
Klasse, und finden Sie vielleicht heraus, dassclear_canvas
gehört. Verwenden Sie die tests, um bei der Gestaltung Ihres Designs, einen Schritt zu einer Zeit.Ja, verspottet für Ihre Objekte in der isolation, sondern mehr integration Stil überprüft, für Objekte, die sich mit äußeren Objekten. Dies sind nur tests, bei denen ein externes Objekt und seinen Status überprüfen, die für das beabsichtigte Verhalten im test.
InformationsquelleAutor Jordão
Jordão ist absolut richtig, aber es ist eine hässliche option auch.
Befestigen Sie Ihre Globale Objekt, um das Fenster in der beforeEach-Methode. Folgenden Code wohl nicht funktionieren (habe es noch nicht getestet), sollte aber gut genug sein, um zu verstehen, wie dies zu umgehen, Jasmin Globale Objekt-problem.
npm test
dann bekomme ich die Fehlermeldung "ReferenceError: Fenster ist nicht definiert'. Ich denke, Jasmin wird im headless-browser, so dass es keine Fenster.InformationsquelleAutor Matas Vaitkevicius