茉莉花(摩卡)嵌套“它”测试

时间:2012-07-13 11:49:35

标签: node.js mongoose jasmine mocha

我试图测试后续创建/删除项目(通过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中实现这样的测试吗?

3 个答案:

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