搜尋

隨機推薦

30 十一月 2009
02 十二月 2009

jasmine - javascript的單元測試框架

https://camo.githubusercontent.com/d3afdfc8b8075b9daf5109c4af7b8b07ab2d7c04/68747470733a2f2f7261776769746875622e636f6d2f6a61736d696e652f6a61736d696e652f6d61737465722f696d616765732f6a61736d696e652d686f72697a6f6e74616c2e737667

jasmine是一個有名的javascript單元測試框架,它是獨立的「行為驅動開發」框架,提供了對javascript開發者來說相對容易使用的測試語法,可以幫助你輕鬆寫出自己的單元測試代碼。

WIKI:https://github.com/pivotal/jasmine/wiki

API: http://pivotal.github.com/jasmine/jsdoc/index.html
(Jasmine的API文件是用jsdoc生成的,關於jsdoc)

可以在下載頁面直接下載jasmine的源碼:https://github.com/pivotal/jasmine

還可以使用git下載(關於git的用法,可以看這裡http://progit.org/book/zh/ch1-4.html

1
$ git clone https:\/\/github.com/pivotal/jasmine.git

下載jasmine的源碼之後,可以看到目錄有一個example的文件夾,這裡就是我們要說的例子
還有一個文件夾lib,這裡放了運行測試案例所必須的文件
其中jasmine.js就是整個框架的核心代碼,
jasmine-html.js用來展示測試結果,jasmine.css用來美化測試結果。

廣告

spec/: 包含了就是這個測試案例所有的測試規則
src/: 存放了我們需要測試的js文件對象
SpecRunner.html: 運行測試用例的環境

spec文件夾下的幾個文件,PlayerSpec.js就是針對src文件夾下的Player.js所寫的測試用例。

1
2
3
4
5
6
7
8
//it用於描述一條簡單的規則,其中第一個參數為實例的名稱
//一般需要使用有實際判定式的有意義的語句來描述
//第二個參數為測試需要執行的代碼
it('should increment a variable', function () {
  var foo = 0;// set up the world
  foo++;// call your application code
  expect(foo).toEqual(1); // passes because foo == 1
});

jasmine有一些自帶的規則

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
//compares objects or primitives x and y and passes if they are equivalent
expect(x).toEqual(y);
 
//compares objects or primitives x and y and passes if they are the same object
expect(x).toBe(y);
 
//compares x to string or regular expression pattern and passes if they match
expect(x).toMatch(pattern);
 
// passes if x is not undefined
expect(x).toBeDefined();
 
//passes if x is null
expect(x).toBeNull();
 
//passes if x evaluates to true
expect(x).toBeTruthy();
 
//passes if x evaluates to false
expect(x).toBeFalsy();
 
//passes if array or string x contains y
expect(x).toContain(y);
 
//passes if x is less than y
expect(x).toBeLessThan(y);
 
//passes if x is greater than y
expect(x).toBeGreaterThan(y);
 
passes if function fn throws exception e when executed
expect(fn).toThrow(e);

如果以上規則不能滿足你的需求,你還以為自定義規則

1
2
3
4
5
6
7
8
9
10
11
beforeEach(function() {
  this.addMatchers({
    //這裡就是自己定義的規則
    toBePlaying: function(expectedSong) {
      //運行校驗代碼,最終返回boolean值
      var player = this.actual;
      return player.currentlyPlayingSong === expectedSong &&
             player.isPlaying;
    }
  });
});

廣告

无觅相关文章插件,快速提升流量

Please publish modules in offcanvas position.