describe("Test1", function() {
before("at the start", function() {
console.log("AT the begining of the test case");
setup();
}
beforeEach("before test case", function() {
console.log("at the begining of the test case");
testsetup();
}
afterEach("at the end of test case", function() {
console.log("at the end of test case");
cleanup();
}
after("at the end of test", function() {
console.log("at the end of test");
commoncleanup();
}
it("test case1", function() {
var retval = sum(2,5);
assert.equal(retval, "then sum is 5");
}
it("test case2", function() {
var retval = sum(5,5);
assert.equal(retval, "the sum is 10");
}
});
如果beforeEach
代码失败或抛出错误,它将继续测试case1和afterEach挂钩。但我希望如果beforeEach
失败,它应该跳过测试case1和afterEach
挂钩,然后继续运行测试用例2和afterEach
挂钩。我的意思是如果任何钩子失败它应该跳过当前的测试用例并继续运行下一个测试用例。
我希望预期的输出是:
Test1
AT the beginning of the test case
before test case
x beforeEach hook fails
before test case
test case2
at the end of test case
at the end of test
1 passing (8ms)
1 failing (0ms)
请帮我找到解决方案。
答案 0 :(得分:3)
您可以使用this.currentTest.state
(不确定何时引入):
afterEach(function() {
if (this.currentTest.state == 'failed') {
// ...
}
});
答案 1 :(得分:1)
没有用于获得你想要的东西的旗帜。 Mocha的设计使得任何钩子中的错误都会立即终止测试。 (在钩子中出错后,Mocha将继续运行afterEach
和after
挂钩,但不会继续运行测试。)
做你想做的事的一种方法是:
写下您的beforeEach
,以便记录设置是否成功。
编写测试以检查测试设置是否正确设置,如果不正确则设置失败。
编写afterEach
,以便在未正确设置测试设置时不会失败。
如何执行此操作的详细信息实际上取决于您的应用程序,但它可能如下所示:
describe("Test1", function() {
var set = false; // Variable indicating whether our setup is set or not.
beforeEach("before test case", function() {
set = testsetup();
});
afterEach("at the end of test case", function() {
if (set)
cleanup();
});
it("test case1", function() {
assert.true(set, "we have a proper setup");
// whatever tests
});
it("test case2", function() {
assert.true(set, "we have a proper setup");
// whatever tests
});
});
在上面的代码中assert
是您用于测试的一些断言库,testsetup
是一个函数,可以创建需要为测试创建的内容并以原子方式成功或失败(即它1}}是一个清理程序。
这样,如果设置仅在一次测试中失败,那么只有这个测试会失败。