我正在为我正在处理的产品执行单元测试的迷你框架。我希望尽可能无缝地发布和管理测试数据。使用Mocha,可以使用After()钩子轻松安排测试数据清理。
你可以在describe()块中包含一个单独的测试,并使用该块的Before / After方法,但是如果可能的话我宁愿避免这样做。
您可以将清理功能传递给afterEach,后者专门针对测试中填充的数据。虽然这只是一次清理所必需的,但这样做似乎很笨拙。
是否可以在一次测试中生成测试数据,仅仅是为了测试,还可以使用Mocha安排对其进行清理?
答案 0 :(得分:0)
当然,只需在测试中运行您的生成和清理。如果它是异步的,你可以使用done
回调让它等到它被调用。
mocha.setup('bdd');
describe('suite', function() {
function getData() {
// Simulate asynchronous data generation
console.log('grabbing data');
return new Promise((resolve, reject) => {
setTimeout(() => resolve(100), 500);
});
}
function cleanup() {
// Simulate asynchronous cleanup
console.log('cleaning up...');
return new Promise((resolve, reject) => {
setTimeout(resolve, 500);
});
}
it('should do generation and clean up', function(done) {
// Generate some data
getData()
.then(data => {
// Test the data
if (data !== 100) {
throw new Error('How?!');
}
console.log('test passed');
// Cleanup
return cleanup();
})
.then(_ => {
// Use done() after all asynchronous work completes
console.log('done cleaning');
done();
})
.catch(err => {
// Make sure it cleans up no matter what
cleanup().then(_ => console.error(err));
});
});
});
mocha.run();
<script src="https://cdn.rawgit.com/mochajs/mocha/2.2.5/mocha.js"></script>
<div id="mocha"></div>
答案 1 :(得分:0)
我认为测试后的清理通常是有问题的,因为清理一致性保证不是很强,即保证运行的清理功能?可能不是。如果不确定将进行清理,那么很可能会使下一个测试处于不一致的状态。我认为尝试尝试是件好事,但你可以通过以下方式防范失败:
在上面,如果你能够在一个事务中包装你的测试它是快速的,(像django和rails这样的web框架这样做并且它非常快并且使得测试/ db状态非常容易推理)