使用jest模拟来自库的回调

时间:2017-06-14 21:34:08

标签: node.js testing mocking jestjs

我试图使用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;

1 个答案:

答案 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')
});
相关问题