2017-06-14 36 views
0

我想使用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

我只想嘲笑的东西在测试本身:

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