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>