将 Jest 与外部依赖项一起使用时遇到问题

Having trouble using Jest with external dependancies

我正在尝试使用 Jest 测试 React with Flux 代码。我是单元测试的新手。

我认为我在嘲笑我的依赖方面做错了(老实说,嘲笑的事情让我很困惑)。

这是我遇到的问题:

//LoginStore-test.js
jest.dontMock('../../constants/LoginConstants');
jest.dontMock('jsonwebtoken');
jest.dontMock('underscore');
jest.dontMock('../LoginStore');

describe("login Store", function(){
    var LoginConstants = require('../../constants/LoginConstants');
    var AppDispatcher;
    var LoginStore;
    var callback;
    var jwt = require('jsonwebtoken');

    var _user = {
        email: 'test@test.com'
    };

    //mock actions                                                                                                                                                                                                                            
    var actionLogin = {
        actionType: LoginConstants.LOGIN_USER,
        'jwt': jwt.sign(_user, 'shhh', { expiresInMinutes: 60*5 })
    };

    beforeEach(function(){
        AppDispatcher = require('../../dispatchers/AppDispatcher');
        LoginStore = require('../LoginStore');
        callback = AppDispatcher.register.mock.calls[0][0];
    });

    ...

    it('should save the user', function(){
        callback(actionLogin);
        var user = LoginStore.getUser();
        expect(user).toEqual(_user);
    });

});


});

LoginStore.js 文件:

var AppDispatcher = require('../dispatchers/AppDispatcher');
var BaseStore = require('./BaseStore');
var LoginConstants = require('../constants/LoginConstants.js');
var _ = require('underscore');
var jwt = require('jsonwebtoken');

//initiate some variables                                                                                                                                                                                                                     
var _user;
var _jwt;

var LoginStore = _.extend({}, BaseStore, {
    getUser: function(){
    return _user;
    }
});

AppDispatcher.register(function(action){

    switch(action.actionType){
    case LoginConstants.LOGIN_USER:
        //set the user                                                                                                                                                                                                                        
        _user = jwt.decode(action.jwt);
        //save the token                                                                                                                                                                                                                      
        _jwt = action.jwt;
    break;

    //do nothing with the default                                                                                                                                                                                                         
    default:
        return true;
    }

    LoginStore.emitChange();

    return true;

});

module.exports = LoginStore;

jsonwebtoken 功能似乎根本不起作用。如果我记录 actionLogin.jwt 它只是 returns undefined。知道我在这里做错了什么吗?

干杯

经过一番搜索,实际上试图找出一个不同的问题,我找到了答案。只需添加

"jest": {"modulePathIgnorePatterns": ["/node_modules/"]}

到您的 package.json 文件