2017-10-17 77 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