我试图使用Jest来测试调用fbgraph库的函数。由于访问令牌每次都在变化,我想在fbgraph中模拟函数。但是,我的测试永远不会完成,因为超时等待模拟函数中的回调。
如何编写下面模块的测试,模拟对fbgraph的调用? (我已将返回值编辑为字符串"成功')以使示例更简单。
正在测试的功能:
class Users {
save(accessToken, callback) {
var graph = require('fbgraph');
graph.setAccessToken(accessToken);
graph.get("me?fields=email", function(err, res) {
callback(null,"Success");
});
}
}
module.exports = Users;
测试模块:
const Users = require('../models/users');
jest.mock('fbgraph');
let users = new Users();
test('If an access token is passed, user.save should return success', done => {
function callback(err, data) {
expect(data).toBe('Success');
done();
}
users.save('test', callback);
});
然后我嘲笑了
const fbgraph = jest.genMockFromModule('fbgraph');
function get(querystring,callback)
{
return callback(null,'Success');
}
module.exports = fbgraph;
答案 0 :(得分:0)
我只是嘲笑测试中的东西:
var graph = require('fbgraph');
const Users = require('../models/users');
jest.mock('fbgraph', ()=>({
setAccessToken: jest.fn(),
get: (url, fn) => fn()
}));
let users = new Users();
test('If an access token is passed, user.save should return success', () => {
const callback = jest.fn()
users.save('test', callback);
expect(callback).toHaveBeenCalledWith('Success')
expect(graph.setAccessToken).toHaveBeenCalledWith('test')
});