@ Houston.js - Learned Jasmine real quick Overview
Jasmine is a Testing Tool for JavaScript
Classes Under Test
Classes under test as follows
var CrewMember = function (name) { this.name = name; } var Ship = function (name) { this.name = name; this.crew = []; this.goWarp = function () { console.log("Going Wrap"); } this.notifyWhenOutofWarp = function(callback){ setTimeout(callback, 1000); } }
Simplest Test
describe("Crew Member", function () { var crew = null; beforeEach(function () { crew = new CrewMember("Kirk"); }); it("should have a name", function () { expect(crew.name).toEqual("Kirk"); }); });
Spy, Run, Wait Feature of Jasmine
describe("Ship", function () { var crew = null; var ship = null; beforeEach(function () { crew = new CrewMember("Kirk"); ship = new Ship("Enterprise"); spyOn(ship, 'goWarp'); ship.crew.push(crew); }); it("should have a crew", function () { expect(ship.crew.length).toEqual(1); }); it("should go to Warp", function () { ship.goWarp(); expect(ship.goWarp).toHaveBeenCalled(); }); it("should call callback when notifyWhenOutofWarp is done", function(){ var flag = false; runs(function() { ship.notifyWhenOutofWarp(function() { flag = true; }); }); waitsFor(function() { return flag; }, "The notifyWhenOutofWarp(callback) call succeeded", 2000); runs(function() { expect(flag).toEqual(true); }); }); });
Running Example
[iajsfiddle fiddle="NxgqB" height="500px" width="100%" show="result,js,html" skin="default"]