Mocha 运行 多个 'its' 系列

Mocha running multiple 'its' in series

我想 运行 进行一系列测试,这些测试建立在之前测试中使用的数据之上。

如何用类似于以下内容的方法实现它:

describe(``,()=>{
    let t = true;
    it(`test1`,()=>assert(t));
    t = false;
    it(`test2`,()=>assert(!t));
});

失败,因为第 3 行在第 4 行之后执行。

不建议让测试依赖于其他测试设置的状态。随着测试套件变得越来越复杂,它非常 对于能够使用 Mocha 的 grep 选项很有用,或者能够暂时使用 it.only 这样当你有一个失败的测试时, 你可以专注于 运行仅测试。但是,如果您的测试依赖于其他 运行ning 之前的测试以便 运行 正确,则您无法隔离它。如果您进入调试器并在您关心的实际测试之前被击中十几次的行上设置断点,那么它很快就会变旧。

在您显示的示例代码中,您可以这样做:

describe(``,()=>{
    let t = true;
    it(`test1`,()=>assert(t));
    it(`test2`,() => {
      t = false; // Set the state here.
      assert(!t);
    });
});

中,Nik 建议在 test1 中设置 t。我建议将其设置为 test2。使用我上面建议的代码,您可以 运行 mocha --grep test2,或暂时将 it(`test2`... 更改为 it.only(`test2`...,您的测试会 运行 就好了。

但是,我怀疑您的实际代码比您给出的示例更复杂,并且实际上可能使用了一些重要代码来设置测试状态。如果您想将测试设置代码与测试本身分开,您可以这样做:

describe(``,() => {
    describe("", () => {
      let t;
      before(() => {
        t = someSubtantialInitialization();
      });

      it(`test1`, () => ...);
    });

    describe("", () => {
      let t;
      before(() => {
        t = someOtherSubstantialInitialization();
      });

      it(`test2`,() => ...);
    });
});

Mocha 有 beforebeforeEach 挂钩,但没有 beforeJustThisOneTest 挂钩。您可以通过将测试和挂钩放在它们自己的 describe 块中来将挂钩与单个测试相关联。