我有一个风帆控制器,我在做的事情如下:
...
function asynFunc(){
/* some logic */
}
module.exports = {
myFunc: function () {
// Call async function and return
asynFunc();
return true;
}
};
现在我想为asynFunc编写单元测试。我能够编写myFunc的单元测试但不能编写asynFunc(获取数据,验证数据)。
请告诉我:
答案 0 :(得分:0)
你真的需要测试私人功能吗?如果你把它私有,似乎你可以在测试其他方法时测试它?
如果您确实需要测试它,可以执行以下操作: myModule.js
async function asyncFunc(){
/* some logic */
}
module.exports = {
myFunc: async function () {
// Call async function and return
await asyncFunc();
return true;
}
};

test.js
const rewire = require('rewire');
const myModule = rewire('./myModule');
describe('unit/myModule:', () => {
const revert = (obj) => {
obj.__revert__();
delete obj.__revert__;
};
it('asyncFunc', async () => {
const asyncFuncSpy = jasmine.createSpy();
asyncFuncSpy.__revert__ = myModule.__set__('asyncFunc', asyncFuncSpy);
const actual = await myModule.myFunc();
expect(actual).toBeThruthy();
expect(asyncFuncSpy).toHaveBeenCalled();
revert(asyncFuncSpy)
})
})

答案 1 :(得分:0)
在99%的案例中,这是对控制器的错误使用!将该功能包装到服务中并统一测试服务。
// Controller
module.exports = {
myFunc: function () {
// Call async function and return
MyService.asynFunc();
return true;
}
};
// Service
module.exports = {
async : function asynFunc(){
/* some logic */
}
}