Javascript 在摩卡所有测试用例之前

Javascript 在摩卡所有测试用例之前,javascript,unit-testing,mocha.js,Javascript,Unit Testing,Mocha.js,我有一个“before”钩子,我想在所有测试用例(文件)之前运行它,理想的情况是无论我运行多少个测试用例和哪个测试用例,都只运行一次 现在我要做的是将“before”钩子放在一个单独的文件中,并在每个测试文件的开头做“require(../beforeAll.js”) //beforeAll.js before('description', function(done) { //do something done() } //all test files require('.

我有一个“before”钩子,我想在所有测试用例(文件)之前运行它,理想的情况是无论我运行多少个测试用例和哪个测试用例,都只运行一次

现在我要做的是将“before”钩子放在一个单独的文件中,并在每个测试文件的开头做“require(../beforeAll.js”)

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


//all test files
require('../beforeAll.js')
//test 
//......
我认为每次运行测试文件时都会运行“before”钩子,但我不知道更好的方法。然而,当我运行所有测试用例时,“before”钩子实际上只运行一次

所以我的问题是,为什么“之前”钩子只运行一次?在这种情况下(只运行一次)最好的方法是什么

before(function(){})
在块中的所有测试之前运行。
beforeach(function(){})
在块中的每个测试之前运行

如果要在测试开始时运行单个函数,请使用
before()

如果要在每次测试之前运行函数,请使用
beforeach()

当您使用
require()
时,您实际上是在当前测试中“包括”该逻辑,就好像您在复制粘贴所需的文件一样。考虑到您使用了before(),它将在第一个测试中运行。在进行第二次测试时,它会看到
before()
已经执行,因此不会再次执行


希望这有帮助!:)

您可以使用mocha-r(--require)参数。

谢谢,所以如果我想在每个测试文件之前运行它,我应该在每个测试文件之前将所需文件设置为a?有没有更好的方法来代替将require放在每个文件中?是的,如果您想在每次测试之前进行此操作,您可以在所需文件中设置一个
beforeach()
。就我个人而言,如果我使用的是beforeach()而不是beforeach(),我会在每个测试文件中都使用它。这确实会导致代码重复,但它强调了
beforeach()
对于这组测试是唯一的。无论哪种方式都可以,存储代码的位置取决于您自己。请记住,
require()
很像PHP
include()
;它只是简单地将内容从文件A复制到文件B:)哦,我认为beforeach()将在每个测试用例之前运行,但不会在每个测试文件之前运行,所以在每个文件之前有什么方法可以执行吗?这是beforeach()的基本思想。;它在每个测试用例之前运行。为什么要在每个文件之前执行此操作?文件应拆分为单个测试用例。。。如果您想在每个文件之前包含代码,则只需在常规的
require()
中包含代码。在某些情况下,需要我在每个文件之前运行一个before钩子。。。如果我确实需要(),如果我需要before()钩子,它仍然只运行一次,对吗?