我试图测试后续创建/删除项目(通过mongoose在mongoDB中)。
创建异步并且它在回调函数中返回已创建项目的ID的问题,我需要此ID来删除创建的项目,所以我尝试了以下代码用于mocha(以不同的方式)但它不起作用。< / p>
describe('Item Model', function(){
it('should be able to create item', function(done){
var item = new Item({name: {first: "Alex"});
item.save(function(err, data){
it('should be able to deleted created item', function(done){
Item.delete({_id: data.id}, function(err, data){
done(err);
});
});
})
});
});
可以在mocha或jasmine中实现这样的测试吗?
答案 0 :(得分:8)
我会对此进行两次测试。一个是测试插入,一个是测试删除。
在coffeescript中看起来应该是这样的
describe 'Item model', () ->
item = ''
before (done) ->
item = new Item {name: {first: "Alex"}}
done
describe 'When inserting Item', () ->
before (done) ->
item.save done
it 'should have been insterted' ->
#CHECK HERE IT IF IT IS INSERTED
decribe 'when deleting', () ->
before (done) ->
item.save (err,data) ->
return done err if err
Item.delete {_id: data.id}, done
it 'should have been deleted' ->
#CHECK HERE IT IF IT IS Deleted
答案 1 :(得分:4)
看到此问题: https://github.com/visionmedia/mocha/issues/438
似乎意图迫使测试去耦合。虽然不方便并且可能需要更多模拟,但这种行为很有用,因为它需要较少的重新测试,并提供更准确的错误图像。
即。有2个测试,测试A和测试B,其中B依赖于A.
测试A断裂,因此B也断裂。你修复了破坏测试A的问题,但现在可能会惊讶地发现测试B在修复过程中或者由于无关的原因而破坏。
当测试不相互依赖时,您会获得更好的信息和更少的意外。
答案 2 :(得分:0)
我遇到了类似的问题,当我尝试使用嵌套的describe / it结构时,它实际上是有效的。
describe('Item Model', () => {
it('should be able to create item', done => {
var item = new Item({name: {first: "Alex"});
item.save(function(err, data){
describe('Item Delete', () => {
it('should be able to deleted created item', done => {
Item.delete({_id: data.id}, function(err, data){
done(err);
});
});
});
});
});
});