3

Expressを使用してnode.jsでアプリを作成しています。
エクスプレスからルート定義を分離したので、エクスプレスをモックアウトせずに単体テストできます。
私がしたことは次のとおりです。

ファイル: usersRoutes.js

 var routes = {
  getAll: function(req,res) {
    var db = req.db; // req.db is initialized through a dedicated middleware function
    var usersCollection = db.get('users');
    usersCollection.find({},{limit:10},function(e,results){
      res.send(results);
    });
  }
};

module.exports = routes;

ファイル: users.js

var express = require('express');
var router = express.Router();
var routes = require('./usersRoutes');

/* GET users listing. */
router.get('/', routes.getAll);

module.exports = router;

そして最後にapp.jsで:

var users = require('./routes/users/users.js');
app.use('/users', users);

ここで、req.send が正しいパラメーターで呼び出されていることを確認する単体テストを作成したいと思います。req.send が非同期で呼び出されるため、正しい方法がわかりません。
この関数を単体テストする正しい方法は何ですか?

4

2 に答える 2

2

モカを使用している場合、コールバックに挿入できる「完了」関数が提供され、モカにテストが非同期であり、その関数が呼び出されるまで待機する必要があることが通知されます

it('should do something',function(done){
  reuest.send(function(){
     expect(true).toEqual(true);
     done()
  })
})

または私が覚えていないようなものは、これが100%正しい構文ですが、かなり近いですこれはコールバックには適していますが、一方でプロミスを使用している場合は、チャイとモカのプロミスアサーションを確認する必要があります。かなりクールです

于 2014-12-31T13:36:06.477 に答える
0

私はあなたの質問に対する答えを探していました。あなたがそれを解決できたかどうか疑問に思っていました. 私の回避策は、ルート(ミドルウェア)が関数で「約束」を返すようにすることでした。次に、私の単体テストで行うことができます

return middleware(req, res).then(function () {
    expect(res.render).to.have.been.calledWith('whatever');
});
于 2015-12-14T12:04:58.707 に答える