我想在一些测试之前计算一些值。最好的方法是什么?使用"之前"或致电功能?
// 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');
});
});
答案 0 :(得分:0)
在这种情况下确实没有区别,因为最终在第二个示例computeVal1()
将在测试之前运行。但是,鉴于这正是before
/ beforeEach
钩子的设计目标,我倾向于与框架保持一致并使用它们。
答案 1 :(得分:0)
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)
使用钩子(before
和beforeEach
)初始化测试使用的数据通常是最好的事情。考虑一下:
在您的第二个代码段中,如果computeVal1
或computeVal2
失败,那么Mocha将无法执行任何测试。在第一个片段中,Mocha可能会在尝试调用它们之前运行一些测试,但它们会失败。如果您有许多Mocha加载的测试文件,可能对您来说Mocha在发生故障之前运行尽可能多的测试。
在您的第二个片段中,即使不需要,Mocha 几乎总是运行computeVal1
和computeVal2
。 如果计算成本太高,您每次都要支付这笔费用。如果您运行mocha --grep=foo
以便它不会选择任何测试,那么将会< / em>被叫。
在您的第一个片段中,Mocha将仅在需要时运行它们。如果您运行mocha --grep=foo
,则Mocha不会调用您的函数。
在您的第二个代码段中,即使使用describe.skip
进行describe
通话,也不会让Mocha跳过调用这些功能。