如何在 mocha 单元测试中使用猫鼬?

Posted

技术标签:

【中文标题】如何在 mocha 单元测试中使用猫鼬?【英文标题】:How to use mongoose in mocha unit test? 【发布时间】:2014-10-12 07:28:04 【问题描述】:

感觉很迷茫,怎么单元测试涉及到mocha中的mongodb,我还是不能成功调用save函数,没有抛出异常。

我尝试用最简单的例子进行测试,发现还是有问题。这是我的代码。

var assert = require("assert")
var mongoose = require('mongoose');

mongoose.connect('mongodb://localhost/dev', function(err)
  if(err) throw err
);

describe('increment Id', function()
  describe('increment', function()
    it('should has increment', function()


      var Cat = mongoose.model('Cat',  name: String );

      var kitty = new Cat( name: 'Zildjian' );
      kitty.save(function (err) 
        if (err) throw err
        console.log('meow');
      );

    )
  )
)

这段代码没有抛出异常,但是在 mongodb 中没有更新或创建数据。

> show collections
pieces
sequences
system.indexes

【问题讨论】:

检查这个它可能是你问题的答案:) ***.com/questions/13320564/… 【参考方案1】:

您正在同步运行测试。

要执行异步测试,您应该添加回调函数:

it('should has increment', function(done)
  var Cat = mongoose.model('Cat',  name: String );
  var kitty = new Cat( name: 'Zildjian' );
  kitty.save(function (err) 
    if (err) 
      done(err);
     else 
      console.log('meow');
      done();
    
  );
)

或者干脆

it('should has increment', function(done)
  var Cat = mongoose.model('Cat',  name: String );
  var kitty = new Cat( name: 'Zildjian' );
  kitty.save(done);
)

【讨论】:

它有效,我正在尝试使用 async 来消除回调。 你不能完全消除回调,你能做的最好的事情就是将它们展平,从而避免回调地狱。 async 使异步函数易于使用和相互结合。

以上是关于如何在 mocha 单元测试中使用猫鼬?的主要内容,如果未能解决你的问题,请参考以下文章

使用proxyquire和mocha在单元测试中模拟方法调用时如何模拟时间延迟(超时)?

如何使用 Visual Studio Code 中的 Mocha 调试 Typescript 编写的单元测试

windows下怎么用mocha进行单元测试

Mocha 单元测试框架简介

如何使用 mongoose、mocha 和 chai 编写用于向 mongodb 插入和检索对象的单元测试?

mocha+Typescript的单元测试搭建