2012-07-13 73 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在修復過程中破裂,或者出於不相關的原因。

當測試不互相依賴時,您可以獲得更好的信息和更少的意外。