如何根据其他Mocha测试编写Mocha测试



我试图在ExpressRESTneneneba API上运行一系列测试,重点是系列,因为它们需要在某种程度上是连续的。让我解释一下:

测试,按顺序:

  1. API是否可访问
  2. API是否正确连接和验证
  3. 然后可以使用身份验证令牌写入数据存储
  4. 然后可以使用身份验证令牌来检索刚刚写入数据存储的数据
  5. 然后可以使用Auth令牌来更改写入的数据(测试它是否与另一个检索一起工作)

注意,这些步骤只有在按顺序进行的情况下才有意义,而Mocha似乎并没有按顺序运行测试。我可以做一个运行第1步的测试,然后做另一个运行步骤1-2的测试,再做一个执行步骤1-3的测试,以此类推,但这绝对不是DRY。我也可以尝试建立一个beforeafter的链,但这似乎不符合惯例。

是否有一种正确的方法来运行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测试是串行运行的,但是,如果出现故障,它会继续到下一个测试,所以看起来它们是并行运行的。

发件人https://mochajs.org/:

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();
}
});
});
});

最新更新