Jasmine

作者: 勿以浮沙筑高台 | 来源:发表于2016-12-28 14:22 被阅读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");
        });
      });
    });
    

    相关文章

      网友评论

          本文标题:Jasmine

          本文链接:https://www.haomeiwen.com/subject/zkusvttx.html