单元测试猫鼬承诺
Unit Test Mongoose Promises
我在 Node 应用程序中有一个快速路由,它使用 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
});
});
});
为了能够在测试中使用 promises,您必须从 npm 安装 sinon-as-promises 模块。然后你可以像这样模拟 ItemModel:
var itemModelMock = sinon.mock(ItemModel);
itemModelMock.expects('findAsync').resolves([]);
我在 Node 应用程序中有一个快速路由,它使用 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
});
});
});
为了能够在测试中使用 promises,您必须从 npm 安装 sinon-as-promises 模块。然后你可以像这样模拟 ItemModel:
var itemModelMock = sinon.mock(ItemModel);
itemModelMock.expects('findAsync').resolves([]);