【问题标题】:before hook before all test cases in Mocha在 Mocha 中所有测试用例之前的钩子之前
【发布时间】:2017-10-17 21:07:52
【问题描述】:

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

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

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


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

我认为每次运行测试文件时都会运行“之前”挂钩,但我不知道更好的方法。但是,当我运行所有测试用例时,“之前”挂钩实际上只运行一次。

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

【问题讨论】:

    标签: javascript unit-testing mocha.js


    【解决方案1】:

    根据MochaJS's documentation on hooks

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

    如果您想在测试开始时运行单个函数,请使用before()
    如果您想在每次测试之前运行一个函数,请使用beforeEach()

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

    希望这会有所帮助! :)

    【讨论】:

    • 谢谢,所以如果我想让它在每个测试文件之前运行,我应该将所需的文件设置为 beforeEach?有没有更好的方法来代替在每个文件中都添加 require ?
    • 是的,如果您想在每次测试之前执行此操作,您可以在所需文件中将其设为 beforeEach()个人如果我使用beforeEach() 而不是before(),我会在每个测试文件中都有它。这确实会导致重复代码,但它强调beforeEach() 是该组测试所独有的。无论哪种方式都可以正常工作,并且存储代码的位置由您决定。请记住,require() 很像 PHP include();它实际上只是将文件 A 中的内容复制到文件 B 中 :)
    • 哦,我认为 beforeEach() 会在每个测试 CASE 之前运行,但不会在每个测试 FILE 之前运行,那么在每个文件之前有什么办法吗?
    • 这就是beforeEach()的大致思路;它在每个测试用例之前运行。为什么要在每个文件之前执行此操作?文件应该被分割成单独的测试用例...如果你想在每个 file 之前包含代码,它只会包含在常规的 require() 中。
    • 有些情况需要我在每个文件之前运行一个 before 钩子...如果我做 require(),如果我需要一个 before() 钩子,它仍然只会运行一次,对吗?
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2016-08-07
      • 1970-01-01
      • 1970-01-01
      • 2018-11-08
      • 1970-01-01
      • 1970-01-01
      • 2017-02-14
      • 2021-12-22
      • 2015-04-16
      相关资源
      最近更新 更多