【发布时间】:2017-03-04 11:34:36
【问题描述】:
我是 Node 中单元测试的新手,在 Promise 方面遇到了障碍。我的模块通过 ApiController 执行搜索,然后返回一个承诺。根据其解析状态,它调用模块内的两个私有函数之一。
模块:
module.exports.process = function(req, res) {
let searchTerm = req.query.searchValue;
ApiController.fetchResults(searchTerm)
.then((results) => onReturnedResults(results), (err) => onNoResults());
function onReturnedResults(results) {
req.app.set('searchResults', results);
res.redirect('/results');
}
function onNoResults() {
res.render('search/search', { noResultsFound: true });
}
};
测试:
var res = {
viewName: '', data : {},
render: function(view, viewData) {
this.view = view;
this.viewData = viewData;
}
};
var req = { query: { searchValue: 'doesnotexist' } }
describe('When searching for results that do not exist', function() {
it('should display a no results found message', function(done) {
let expectedResult = {
noResultsFound: true;
}
SearchController.process(req, res);
// Assert...
expect(res.viewData).to.be.equal(expectedResult);
done();
});
})
这方面的最佳做法是什么?我如何“模拟” fetchResults 返回的承诺,使其实际上不会从 API 获取结果(同时仍调用私有函数)?
【问题讨论】:
标签: javascript node.js unit-testing chai