16

我试图测试项目的后续创建/删除(在 mongoDB 中通过 mongoose)。

创建的问题是异步的,它在回调函数中返回已创建项目的 ID,我需要此 ID 来删除已创建的项目,所以我尝试了 mocha 的以下代码(以不同的方式)但它不起作用。

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 中实现吗?

4

3 回答 3

9

我会为此做两个测试。一个是测试插入,一个是测试删除。

在咖啡脚本中应该看起来像这样

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
于 2012-07-13T12:03:40.187 回答
4

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

似乎其目的是强制将测试解耦。虽然不方便并且可能需要更多的模拟,但这种行为很有用,因为它需要的重新测试更少,并且可以更清晰地了解到底发生了什么。

即有2个测试,测试A和测试B,其中B依赖于A。

测试 A 中断,因此 B 也中断。您修复了破坏测试 A 的内容,但现在可能会惊讶地发现测试 B 在修复过程中或由于不相关的原因而破坏。

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

于 2014-07-24T21:57:50.097 回答
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);
               });
            });
         });
      }); 
   });
});
于 2019-05-21T09:30:25.317 回答