Jasmine中describe和it

原创:Jasmine中describe和it_wangmiaoyan的博客-CSDN博客_describe js

上文中提到PlayerSpec.js,我们用notepad打开内容如下:

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");
    });
  });
});

我们可以看到其中有describe、beforeEach、it等函数

describe

  • describe是Jasmine的全局函数,用于创建一个测试套件,可以理解为一组测试用例的集合。
  • describe函数接受两个参数(一个字符串和一个回调函数)。字符串是这个测试套件的名字或标题,通常描述被测试内容,用之前的比喻来说,describe就是一个故事,字符串就是这个故事的标题。回调函数是实现测试套件的代码块(称为describe块)。
  • 将上面的代码拆分一下,大结构就是
describe("Player", function() 
{
    /* tests */
});

describe是可以嵌套使用的,我们可以理解为一个大故事是由多个小故事组成的,从PlagerSpec.js中我们也可以看到有嵌套使用的describe函数。
 

  • it
    • it也是Jasmine的全局函数,用来在describe块中创建一个测试用例(spec),和describe一样,it接受两个参数(一个字符串一个回调函数),字符串参数是测试用例的名字或标题,回调函数是实现测试用例的代码块(称为it块),如下:
it("should be able to play a Song", function() {
    player.play(song);
    expect(player.currentlyPlayingSong).toEqual(song);
  });

在我看来,it可以理解为故事中人物的行为

describe和it函数的字符串参数是很重要的。如果描述得当的话,你的测试可以将一个完整的测试场景以自然语言的形式表达出来,形成文档。
describe和it都属于JavaScript函数,所以JavaScript的作用域规则也适用于此。
  用java中学过的全局变量与局部变量的概念来说,我们可以把describe类别为一个class,把it类比于里面的方法,在describe中声明的变量即全局变量,在它里面的所以的it中都可以使用。而it中声明的变量为局部变量,只在此it内部有效。
 

beforeEach
-如果你用过Junit,或者python+selenium,就会发现里面都会有Setup,Teardown ,也就是俗称的安装和拆卸。
我们在执行用例之前,通常都需要做大量的铺垫,例如准备测试数据,建立测试场景,这些为了成功测试而做的准备工作成为Test Fixture。测试完之后需要释放资源。这些大量的重复的工作我们可以放在setup和teardown中,减少代码的冗余。在测试运行之前先运行setup,测试结束后运行teardown。
在Jasmine中有四个全局函数用于安装和拆卸,如下
beforeEach  [在每一个测试用例(it块)执行之前都执行一遍beforeEach 函数]
afterEach  [在每一个测试用例(it块)执行之后都执行一遍afterEach 函数]
beforeAll  [在测试套件(describe块)中所有测试用例执行之前执行一遍beforeAll函数]
afterAll   [在测试套件(describe块)中所有测试用例执行之后执行一遍afterAll函数]
describe中代码与拆装卸载以及it的执行顺序是怎样的?下一节我们举例来说明


————————————————
版权声明:本文为CSDN博主「wangmiaoyan」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wangmiaoyan/article/details/79026647

猜你喜欢

转载自blog.csdn.net/qq_42200107/article/details/126932792
今日推荐