2014-02-12 25 views
8

我想在所有測試之前做一些事情,然後呢?什麼是組織我的代碼的最佳方式?例如:備份一些變量 - >清除它們 - >測試一下 - >恢復備份。 'beforeEach'和'afterEach'都太高性價比了。謝謝!BeforeAll和AfterAll在javascript測試用例

回答

0

在所有測試開始之前調用一個函數並不重要;然而,Jasmine(1.3.1,至少)不允許你在記者API之外指定你自己的完成回調。

這是我在Google Groups上發現的一個快速小黑客。將此添加到您的SpecRunner.html或同等產品中。

var oldCallback = jasmineEnv.currentRunner().finishCallback; 

jasmineEnv.currentRunner().finishCallback = function() { 
    oldCallback.apply(this, arguments); 

    // Do your code here 
}; 

jasmineEnv.execute(); 
0

茉莉花提供選項寫你自己的記者,並附上它。爲了實現記者,有基本回調像initialize,jasmineStartedjasmineDone。有了這個,你可以達到你的要求。例如,在Jasmine 2.0中,參考jasmine-html.js文件有一個基本的理解。

+0

那個文件在哪裏? – pharaon450

+0

檢查Jasmine2.0獨立版本,該文件的位置是「jasmine-standalone-2.0.0 \ lib \ jasmine-2.0.0 \ jasmine-html.js」。 – user3037143

9

一個非常簡單的解決辦法:

describe("all o' my tests", function() { 

    it("setup for all tests", function() { 
    setItUp(); 
    }); 

    describe("actual test suite", function() { 

    }); 

    it("tear down for all tests", function() { 
    cleanItUp(); 
    }); 

}); 

這樣做的好處是,你真的可以把你的安裝/拆卸的任何地方(例如,在開始時/嵌套套件的結束)。

+0

這似乎與異步測試一起工作。 – AJP

+1

如果您在「it」塊中更改某個狀態,則可能會引入代碼異味。 「it」塊僅適用於無邏輯斷言。 – gnerkus

6

Jasmine> = 2.1支持beforeAll/afterAll爲您的套件進行一次性設置和拆卸。

如果您使用的是Jasmine 1.x,您可以使用it(如其他人所建議的)或加載支持beforeAll/afterAll的node_module,例如jasmine-before-all