Node.js 使用jest模拟库中的回调

Node.js 使用jest模拟库中的回调,node.js,testing,mocking,jestjs,Node.js,Testing,Mocking,Jestjs,我试图使用Jest测试一个调用fbgraph库的函数。由于访问令牌每次都会更改,我想在fbgraph中模拟该函数。但是,我的测试从未完成,因为它在等待模拟函数中的回调时超时 如何为下面的模块编写模拟fbgraph调用的测试?(我编辑了字符串“Success”的返回值)以简化示例 正在测试的功能: class Users { save(accessToken, callback) { var graph = require('fbgraph'); gr

我试图使用Jest测试一个调用fbgraph库的函数。由于访问令牌每次都会更改,我想在fbgraph中模拟该函数。但是,我的测试从未完成,因为它在等待模拟函数中的回调时超时

如何为下面的模块编写模拟fbgraph调用的测试?(我编辑了字符串“Success”的返回值)以简化示例

正在测试的功能:

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;

我只会嘲笑测试中的东西:

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')
});