Javascript测试框架Jasmine(一):简介
测试报告会自动追加到页尾
<script type="text/javascript"> function Player() { } Player.prototype.play = function (song) { this.currentlyPlayingSong = song; this.isPlaying = true; }; Player.prototype.pause = function () { this.isPlaying = false; }; Player.prototype.resume = function () { if (this.isPlaying) { throw new Error("song is already playing"); } this.isPlaying = true; }; Player.prototype.makeFavorite = function () { this.currentlyPlayingSong.persistFavoriteStatus(true); }; </script> <script type="text/javascript"> function Song() { } Song.prototype.persistFavoriteStatus = function (value) { // something complicated throw new Error("not yet implemented"); }; </script> <!-- include spec files here... --> <script type="text/javascript"> beforeEach(function () { jasmine.addMatchers({ toBePlaying: function () { return { compare: function (actual, expected) { var player = actual; return { pass: player.currentlyPlayingSong === expected && player.isPlaying } } }; } }); }); </script> <script type="text/javascript"> describe("Player", function () { var player; var song; beforeEach(function () { player = new Player(); song = new Song(); }); it("should be able to play a Song", function () { player.play(song); expect(player.currentlyPlayingSong).toEqual(song); //demonstrates use of custom matcher expect(player).toBePlaying(song); }); describe("when song has been paused", function () { beforeEach(function () { player.play(song); player.pause(); }); it("should indicate that the song is currently paused", function () { expect(player.isPlaying).toBeFalsy(); // demonstrates use of 'not' with a custom matcher expect(player).not.toBePlaying(song); }); it("should be possible to resume", function () { player.resume(); expect(player.isPlaying).toBeTruthy(); expect(player.currentlyPlayingSong).toEqual(song); }); }); // demonstrates use of spies to intercept and test method calls it("tells the current song if the user has made it a favorite", function () { spyOn(song, 'persistFavoriteStatus'); player.play(song); player.makeFavorite(); expect(song.persistFavoriteStatus).toHaveBeenCalledWith(true); }); //demonstrates use of expected exceptions describe("#resume", function () { it("should throw an exception if song is already playing", function () { player.play(song); expect(function () { player.resume(); }).toThrowError("song is already playing"); }); }); }); </script>