我可以在测试之间使用之前,如下面的代码所示?

时间:2015-02-19 13:49:21

标签: node.js mocha chai

我想在一些测试之前计算一些值。最好的方法是什么?使用"之前"或致电功能?

// Way 1
var expect = require('chai').expect;
describe("a test", function() {
    var val1, val2;
    before(function() {
        val1 = computeVal1();
    });

    it("should return hi1", function() {
        expect(val1).to.equal('hi1');
    });

    before(function() {
        val2 = computeVal2();
    });

    it("should return hi2", function() {
        expect(val2).to.equal('hi2');
    });
});

以上方式是更好还是以下方式更好?

// Way 2
var expect = require('chai').expect;
describe("a test", function() {
    var val1, val2;
    val1 = computeVal1();

    it("should return hi1", function() {
        expect(val1).to.equal('hi1');
    });


    val2 = computeVal2();

    it("should return hi2", function() {
        expect(val2).to.equal('hi2');
    });
});

3 个答案:

答案 0 :(得分:0)

在这种情况下确实没有区别,因为最终在第二个示例computeVal1()将在测试之前运行。但是,鉴于这正是before / beforeEach钩子的设计目标,我倾向于与框架保持一致并使用它们。

答案 1 :(得分:0)

这来自mocha documentation

describe('hooks', function() {
  before(function() {
    // runs before all tests in this block
  })
  after(function(){
    // runs after all tests in this block
  })
  beforeEach(function(){
    // runs before each test in this block
  })
  afterEach(function(){
    // runs after each test in this block
  })
  // test cases
})

因此,使用before或直接在describe下调用函数没有太大区别。在第二个示例中,val2的值不会在第一个测试中可用,但在第一个示例中,val2的值将是。

然而,使用beforeEach更好地实践IMO。这样,一次测试的状态不会影响另一次测试。

答案 2 :(得分:0)

使用钩子(beforebeforeEach)初始化测试使用的数据通常是最好的事情。考虑一下:

  1. 在您的第二个代码段中,如果computeVal1computeVal2失败,那么Mocha将无法执行任何测试。在第一个片段中,Mocha可能会在尝试调用它们之前运行一些测试,但它们会失败。如果您有许多Mocha加载的测试文件,可能对您来说Mocha在发生故障之前运行尽可能多的测试。

  2. 在您的第二个片段中,即使不需要,Mocha 几乎总是运行computeVal1computeVal2如果计算成本太高,您每次都要支付这笔费用。如果您运行mocha --grep=foo以便它不会选择任何测试,那么将会< / em>被叫。

    在您的第一个片段中,Mocha将仅在需要时运行它们。如果您运行mocha --grep=foo,则Mocha不会调用您的函数。

    在您的第二个代码段中,即使使用describe.skip进行describe通话,也不会让Mocha跳过调用这些功能。