Node.js 单元测试猫鼬承诺

Node.js 单元测试猫鼬承诺,node.js,mongoose,mocha.js,sinon,chai,Node.js,Mongoose,Mocha.js,Sinon,Chai,我在一个节点应用程序中有一个express route,它使用Mongoose查询Mongo数据库。get请求中使用了一个查找项目的承诺,我不确定如何测试这个承诺 我不太熟悉单元测试节点应用程序 这是快速路线的代码,它可以工作,但我不确定如何测试它: var express = require('express'); var router = express.Router(); var promise = require('bluebird'); // bluebird.promisifyAll

我在一个节点应用程序中有一个express route,它使用Mongoose查询Mongo数据库。
get
请求中使用了一个查找项目的承诺,我不确定如何测试这个承诺

我不太熟悉单元测试节点应用程序

这是快速路线的代码,它可以工作,但我不确定如何测试它:

var express = require('express');
var router = express.Router();
var promise = require('bluebird');
// bluebird.promisifyAll is used on Mongoose in app.js
var ItemModel = require('./itemModel');

router.get('/', function(req, res, next) {
    ItemModel.findAsync()
        .then(function(items) {
            res.status(200).send(items);
        })
        .catch(function(err) {
            next(err);
        });

});

module.exports = router;
这是我到目前为止在测试中所做的。我不确定如何在routes.get方法中测试承诺:

describe('ItemRoute', function() {
    var express = require('express');
    var bodyParser = require('bodyParser');
    var supertest = require('supertest');
    var sinon = require('sinon');
    var expect = require('chai').expect;
    var assert = require('chai').assert;

    var ItemModel = require('./ItemModel');
    var ItemRoute = require('ItemRoute');

    var uri = '/items/';

    var agent;

    beforeEach(function(done) {
        var app = express();

        app.use(bodyParser.json());
        app.use(bodyParser.urlencoded({extended: false}));
        app.use(uri, releaseNotesRoute);

        agent = supertest.agent(app);

        done();
    });

    describe('GET', function() {
        it('returns an empty array when no items are stored in Mongo', function() {

            // Not sure how to test the route here with a get that
            // uses a promise, ItemModel.findAsync().then

        });
    });

});

为了能够在测试中使用承诺,您必须从npm安装sinon作为承诺模块。然后您可以像这样模拟ItemModel:

var itemModelMock = sinon.mock(ItemModel);
itemModelMock.expects('findAsync').resolves([]);

为了能够在测试中使用承诺,您必须从npm安装sinon作为承诺模块。然后您可以像这样模拟ItemModel:

var itemModelMock = sinon.mock(ItemModel);
itemModelMock.expects('findAsync').resolves([]);

Is
itemModelMock.expected('findAsync')。解析([])
来自
ItemModel.findAsync.then()调用的预期返回值。
itemModelMock.expected('findAsync')。rejects()用于catchIs
itemModelMock.expected('findAsync')。解析([])
调用
ItemModel.findAsync.then()
的预期返回?是的,解决了当时的用法,
itemModelMock.expect('findAsync').rejects()
用于catch我写了一篇关于mocha测试承诺的文章我写了一篇关于mocha测试承诺的文章