Jasmine

2016-12-28  本文已影响28人  勿以浮沙筑高台
香山.jpg

我们开发的应用程序不能有任何错误,必须按照预期精确地执行,更重要的是在应用程序中添加新的特性时,保证不破坏任何原有内容。为了做到以上要求,最原始的做法是,每次有更改时刷新浏览器,每处点击进行验证,来保证一切正常。这样的做法速度慢而不够精确。我们可以通过编程进行软件测试,系统地检查各项功能。

Jasmine是一个测试驱动的JavaScript开发框架。在这里下载独立发行版本,其中包含测试所需要的所有文件,打开SpecRunner.html将会运行被包含的规则(specs)。将SpecRunner.html<head>内部的源文件和specs链接替换成你自己的。

在SpecRunner.html中添加源文件和测试文件

相关的几个名词####

describe: 定义了一套测试内容,由一组相关的spec组成。describe是一个全局函数,有两个参数,一个string(测试集的名称或标题——通常是什么正在测试),一个function,该函数是实现该测试集的代码块。测试嵌套。

Spec: 由全局函数It定义,包含一个string和一个function,string是Spec的标题。functionSpec的测试内容,一个Spec包含一个或多个测试状态的期望(Expectations, 真或假的断言 ),所有测试状态的值为 True时此 Spec通过测试。

Expectations: 期望是由函数 expect(带有一个实际值作为参数)建立。 expect 被匹配函数链接到期望得到的值。

** Matchers: 每一个匹配函数用于实现 真实值期望值 之间的布尔比较,并向框架Jasmine报告期望的值。Jasmine** 会根据期望的值判断包含此期望Spec的测试是否通过。

一个完整的测试文件:######
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");
    });
  });
});
上一篇下一篇

猜你喜欢

热点阅读