2012-07-13 77 views
13

我试图测试随后创建/删除项目(在mongoDB通过猫鼬)。茉莉花(摩卡)嵌套“它”测试

创建异步并返回创建的项目在回调函数中的ID的问题,我需要此ID来删除创建的项目,所以我尝试了以下代码为摩卡(以不同的方式),但它没有奏效。

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

    }) 
    }); 

}); 

这样的测试可以在摩卡或茉莉花中实现吗?

回答

7

我会有两个测试。一个是测试插入和一个测试删除。

看起来应该像这样的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 
+0

好吧,我会试试看。谢谢。 – WHITECOLOR 2012-07-13 14:25:20

+15

我仍然喜欢嵌套的东西可以完成。 – Zlatko 2012-11-08 14:58:38

+45

用CoffeeScript答案回答JavaScript问题是一种不好的做法。我喜欢CoffeeScript,但并非所有JS程序员都能阅读和理解它。 – 2014-07-24 22:10:23

4

看到这个问题: https://github.com/visionmedia/mocha/issues/438

似乎意图是迫使测试进行去耦。虽然不方便,并且可能需要更多嘲弄,但这种行为非常有用,因为它需要较少的重新测试,并提供了一个清晰的图像,确切地说出了什么问题。

即有2次试验,试验A和试验B,其中B是取决于A.

试验A破裂,B因此打破为好。您修复了破坏测试A的内容,但现在可能会惊讶地发现测试B在修复过程中破裂,或者出于不相关的原因。

当测试不互相依赖时,您可以获得更好的信息和更少的意外。