【发布时间】:2019-08-13 17:23:41
【问题描述】:
我对我的一个控制器进行了单元测试,它有一个查找数据(续集)并将结果作为 json 添加到响应对象的函数。
我有两个存根,一个叫另一个不是。
控制器
exports.findAll = (req, res) => {
Idea.findAll().then(ideas => {
console.log(ideas);
return res.json(ideas);
}).catch(err => {
console.log(err);
});
};
控制器测试
const chai = require('chai');
const {match, stub, resetHistory, spy} = require('sinon');
const proxyquire = require('proxyquire');
var sinonChai = require("sinon-chai");
chai.should();
chai.use(sinonChai);
const {makeMockModels} = require('sequelize-test-helpers');
describe('Idea Controller', function () {
const data = {
id: 1,
title: 'Stubbed Title',
text: 'Stubbed text'
};
describe('findAll()', function () {
it('Success case ', function () {
const mockResponse = () => {
const res = {};
res.json = stub().returns(res);
return res;
};
let res = mockResponse();
const Idea = {findAll: stub()};
const mockModels = makeMockModels({Idea});
Idea.findAll.resolves(data);
const ideaController = proxyquire('../../src/controllers/IdeaController', {
'../models': mockModels
});
ideaController.findAll({}, res);
Idea.findAll.should.have.been.called; // passes
res.json.should.have.been.called; //fails
});
})
});
【问题讨论】:
-
问题可能是因为
findAll是异步的。尝试在.then内部测试 -
谢谢,这正是问题所在。将 json 断言移到里面然后解决了这个问题
-
@rkm 提供的答案如果解决了您的问题,则应标记为已接受。
标签: javascript sequelize.js sinon chai