describe('1', function () {
beforeEach(function () {
// do this before each it EXCEPT 1.5
});
it('1.1', function () {
});
it('1.2', function () {
});
it('1.3', function () {
});
it('1.4', function () {
});
it('1.5', function () {
// beforeEach shouldn't run before this
});
});
我想阻止在beforeEach
阻止it
之前运行1.5
。我怎么能这样做?
答案 0 :(得分:2)
我建议使用嵌套你的描述,例如:
describe('1', function () {
describe('1 to 4', function () {
beforeEach(function () {
// do this before each it EXCEPT 1.5
});
it('1.1', function () {
});
it('1.2', function () {
});
it('1.3', function () {
});
it('1.4', function () {
});
});
describe('only 5', function () {
it('1.5', function () {
// beforeEach shouldn't run before this
});
});
在幕后描述将注册beforeEach函数,如果它存在,将调用所有 itFunctions 。
它函数将被顺序调用,因此您也可以使用闭包来控制beforeEach何时运行 - 但它有点hacky - 例如:
describe('1', function () {
var runBefore = true
beforeEach(function () {
// do this before each it EXCEPT 1.5
if (runBefore) {
// actual code
}
});
// functions removed for brevity
it('1.4', function () {
runBefore = false;
});
it('1.5', function () {
// beforeEach shouldn't run before this
// turn it back on for 1.6
runBefore = true;
});
});
答案 1 :(得分:0)
您可以通过 avoiding nesting when you're testing 实现。这个想法是为了避免不必要的抽象,而是提取一些将设置测试用例的函数,然后在任何需要的地方调用这个函数。
这导致代码更具可读性和更易于维护。您不必通过跟踪所有嵌套的 beforeEach
调用来弄清楚测试用例中发生了什么,而是可以简单地逐行阅读。它使您的问题变得微不足道:
const setupTestCase = () => {
// put the code here, instead of in beforeEach
// if you're doing multiple actions, put them in separate functions and call them one by one
// this makes your test more readable and easier to maintain
};
describe('1', function () {
it('1.1', function () {
setupTestCase();
// do test stuff
});
it('1.2', function () {
setupTestCase();
// do test stuff
});
it('1.3', function () {
setupTestCase();
// do test stuff
});
it('1.4', function () {
setupTestCase();
// do test stuff
});
it('1.5', function () {
// here we simply don't call setupTestCase()
// do test stuff
});
});
附注。此外,在许多情况下,您不需要顶级 describe
块,只需将每个顶级 describe
移动到单独的文件中,就可以使您的代码更具可读性并节省一层嵌套。