Node.js 如何编写依赖于其他Mocha测试的Mocha测试?

Node.js 如何编写依赖于其他Mocha测试的Mocha测试?,node.js,express,testing,mocha.js,chai,Node.js,Express,Testing,Mocha.js,Chai,我有一系列的测试,我正试图在一个快速RESTAPI上运行,重点是word series,因为它们需要在某种程度上是顺序的。让我解释一下: 测试,按顺序: API是否可访问? API是否正确连接和验证? 然后可以使用身份验证令牌写入数据存储? 然后可以使用身份验证令牌检索刚刚写入数据存储的数据? 如果写测试与另一个retrieve一起工作,则可以使用Auth令牌来更改数据? 请注意,这些步骤只有在按顺序进行时才有意义,而Mocha似乎并没有按顺序运行测试。我可以做一个运行步骤1的测试,然后再做一个

我有一系列的测试,我正试图在一个快速RESTAPI上运行,重点是word series,因为它们需要在某种程度上是顺序的。让我解释一下:

测试,按顺序:

API是否可访问? API是否正确连接和验证? 然后可以使用身份验证令牌写入数据存储? 然后可以使用身份验证令牌检索刚刚写入数据存储的数据? 如果写测试与另一个retrieve一起工作,则可以使用Auth令牌来更改数据? 请注意,这些步骤只有在按顺序进行时才有意义,而Mocha似乎并没有按顺序运行测试。我可以做一个运行步骤1的测试,然后再做一个运行步骤1-2的测试,然后再做一个运行步骤1-3的测试,依此类推,但这绝对不是干的。我也可以尝试建立一个前后链,但这似乎不符合惯例

是否有适当的方法来运行Mocha测试,检查流程中的顺序步骤

我试图摆脱这种模式,只是在重复测试中添加额外的步骤

describe('Api', () => {
    it('should be accessible', (done) => {
        // Try to connect:
        Api.connect((error, conn) => {
            done(error);
        });
    });

    it('should connect and authenticate properly', (done) => {
        // Try to connect:
        Api.connect((error, api) => {
            if (error) done(error);
            // Then try to authenticate:
            api.authenticate(TEST_AUTH_CREDENTIALS, (error, conn) => {
                done(error);
            });
        });
    });

    it('should allow for data to be written to the data store', (done) => {
        // Try to connect:
        Api.connect((error, api) => {
            if (error) done(error);
            // Then try to authenticate:
            api.authenticate(TEST_AUTH_CREDENTIALS, (error, conn) => {
                if (error) done(error);
                // Then try to write data:
                conn.write(generateTestData(), (error, res) => {
                    done(err);
                });
            });
        });
    });

    it('should allow for written data to be read from the data store', (done) => {
        // Try to connect:
        Api.connect((error, api) => {
            if (error) done(error);
            // Then try to authenticate:
            api.authenticate(TEST_AUTH_CREDENTIALS, (error, conn) => {
                if (error) done(error);
                let testData = generateTestData();
                // Then try to write data:
                conn.write(testData, (error, res) => {
                    if (error) done(error);
                    // Then try to read data:
                    conn.readLast((error, res) => {
                        if (error) done(error);
                        assert.equal(testData, res);
                    });
                });
            });
        });
    });
});

Mocha测试是串行运行的,但是,如果出现故障,它将继续进行下一个测试,因此看起来它们是并行运行的

发件人:

摩卡测试连续运行,允许灵活和准确 报告,同时将未捕获的异常映射到正确的测试用例

假设您可以在第一次失败后使其停止,但我无法使此标志正常工作:

-b、 -首次试验失败后的保释

测试之间通过状态的示例:

describe('Api', () => {
  var api, conn;

  it('should be accessible', (done) => {
    // Try to connect:
    Api.connect((error, new_api) => {
      if (error) {done(error);} else {
        api = new_api
        done();
      }
    });
  });

  it('should authenticate properly', (done) => {
    // Then try to authenticate:
    api.authenticate(TEST_AUTH_CREDENTIALS, (error, new_conn) => {
      if (error) {done(error);} else {
        conn = new_conn;
        done();
      }
    });
  });

  it('should allow for data to be written to the data store', (done) => {
    // Then try to write data:
    conn.write(generateTestData(), (error, res) => {
      if (error) {done(error);} else {
        done();
      }
    });
  });
});

我真正想问的是,如何避免顺序测试的模式,在前面的步骤中,每个步骤都会构建更多的步骤。连接连接然后验证。连接,然后验证,然后写入。连接,然后认证,然后写,然后读,和梨树上的鹧鸪。我在上面添加了一个例子,以更好地表达我的意思。除非我遗漏了什么,否则不要这样做。例如,前两个测试可以将api和conn保存在测试之外的变量中,并将它们传递给以下测试。Mocha将按顺序运行它们。实际上,除了最后一个测试,您不能删除所有测试吗?如果出现错误,您已经在每个级别调用done。如果需要,您可以在每个调用级别添加更多的断言。不太可能,因为这样您就不知道失败的是什么。您只知道有些东西不起作用。为什么,您将得到错误消息和行,与您在早期测试失败时得到的输出相同。如果愿意,可以添加更多断言,但我认为输出类似。