2017-10-17 176 views
0

我有一個,我想之前的所有測試案例(文件)運行鉤「之前」,理想的情況將被運行一次且僅一次不管多少測試用例和前鉤前測試用例我運行。所有測試用例摩卡

現在我要做的就是把那個勾在一個單獨的文件,「之前」和做「規定(」 ../ beforeAll.js「)」,在每個測試文件的開頭,

//beforeAll.js 
before('description', function(done) { 
    //do something 
    done() 
} 


//all test files 
require('../beforeAll.js') 
//test 
//...... 

我認爲每次運行測試文件時都會運行「before」鉤子,但我不知道更好的方法來完成它。但是,當我運行所有測試用例時,「before」鉤子實際上只運行一次。

所以我的問題是,掛鉤只運行一次,爲什麼「之前」?在這種情況下最好的方法是什麼(只運行一次)?

回答

1

根據MochaJS's documentation on hooks

before(function() {})運行之前所有測試的塊。
beforeEach(function() {})之前運行每個測試在該塊。

如果你想運行在您的測試開始時的奇異功能,使用before()
如果您想在每次測試之前運行某個功能,請使用beforeEach()

當你使用require(),你基本上是「包括」在目前的測試邏輯,雖然你是複製粘貼所需的文件。考慮到你使用before(),它會在第一次測試中運行。到了第二次測試時,它看到before()已經執行,所以它不會再執行。

希望這會有所幫助! :)

+0

謝謝你,所以如果我想它的每個測試文件運行前,我應該作出必要的文件beforeEach?有沒有更好的方式來做到這一點,而不是在每個文件中加入require? – Keming

+0

是的,如果你想在每次測試之前做到這一點,你可以在所需文件中使用beforeEach()。 **個人**如果我使用'beforeEach()'而不是'before()',我會在每個測試文件中使用它。這會導致重複的代碼,但它強調'beforeEach()'對於該組測試是唯一的。無論哪種方式都可以正常工作,並且存儲代碼的位置取決於您。只要記住'require()'就像一個PHP include()';它只是基本上將文件A中的內容複製到文件B :) –

+0

哦,我認爲beforeEach()將在每個測試CASE之前運行,但不是在每個測試FILE之前運行,那麼在每個文件之前有什麼辦法做? – Keming