Node.js 如何编写依赖于其他Mocha测试的Mocha测试?
我有一系列的测试,我正试图在一个快速RESTAPI上运行,重点是word series,因为它们需要在某种程度上是顺序的。让我解释一下: 测试,按顺序: API是否可访问? API是否正确连接和验证? 然后可以使用身份验证令牌写入数据存储? 然后可以使用身份验证令牌检索刚刚写入数据存储的数据? 如果写测试与另一个retrieve一起工作,则可以使用Auth令牌来更改数据? 请注意,这些步骤只有在按顺序进行时才有意义,而Mocha似乎并没有按顺序运行测试。我可以做一个运行步骤1的测试,然后再做一个运行步骤1-2的测试,然后再做一个运行步骤1-3的测试,依此类推,但这绝对不是干的。我也可以尝试建立一个前后链,但这似乎不符合惯例 是否有适当的方法来运行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的测试,然后再做一个
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。如果需要,您可以在每个调用级别添加更多的断言。不太可能,因为这样您就不知道失败的是什么。您只知道有些东西不起作用。为什么,您将得到错误消息和行,与您在早期测试失败时得到的输出相同。如果愿意,可以添加更多断言,但我认为输出类似。