我使用mocha进行一些集成测试并拥有许多测试集。 每组都有初始化测试。当这样的测试失败时,该组的其余部分根本不应该运行,因为如果一个失败则每个都会失败。 问题是我无法避免这种初始化测试,因为部分代码/环境是由某些工具生成的,不保证任何正确的结果。
是否可以使用mocha实现这一点?
答案 0 :(得分:2)
使用BDD界面,使用Mocha执行此操作的常规方法是将设置测试环境的任何内容放入before
或beforeEach
:
describe("foo", function () {
describe("first", function () {
before(function () {
// Stuff to be performed before all tests in the current `describe`.
});
beforeEach(function () {
// Stuff to perform once per test, before the test.
});
it("blah", ...
// etc...
});
describe("second", function () {
before(function () {
// Stuff to be performed before all tests in the current `describe`.
});
beforeEach(function () {
// Stuff to perform once per test, before the test.
});
it("blah", ...
// etc...
});
});
如果测试所依赖的before
或beforeEach
失败,则不会运行测试。其他不依赖于它的测试仍然会运行。因此,在上面的示例中,如果传递给名为before
的{{1}}中的describe
的回调失败,则名为first
的{{1}}中的测试不会受到影响只要他们自己的describe
和second
回调没有失败,就会运行。
除此之外,Mocha旨在运行彼此独立的测试。因此,如果一个before
失败,那么其他人仍然会运行。
答案 1 :(得分:1)
我发现mocha-steps
基本上允许你写一个it()
s的“链”(称为step()
),如果其中一个断开,mocha会中止该套件,从而避免了不可避免的失败的级联,我发现pull request 8标记后续步骤和子套素为待定。所以我可以写:
describe("businessCode()", function() {
step("should be not null", function() {
assert(businessCode() != null)
});
step("should be a number", function() {
assert(typeof businessCode() === 'number');
});
step("should be greater than 10", function() {
assert(businessCode() > 10);
});
describe("thingThatCallsBusinessCode()", function() {
step("should be greater than 10", function() {
assert(thingThatCallsBusinessCode() != null);
});
});
});
如果是businessCode()
返回一个布尔值,只有should be a number
测试失败;随后的(并且子套件将被标记为待定)。