Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/447.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 常量不可用于操作中的jest测试_Javascript_Facebook_Reactjs_Jestjs - Fatal编程技术网

Javascript 常量不可用于操作中的jest测试

Javascript 常量不可用于操作中的jest测试,javascript,facebook,reactjs,jestjs,Javascript,Facebook,Reactjs,Jestjs,当我在下面运行navAction-test.js时,我得到以下错误:TypeError:无法读取未定义的 据我所知,加载的常量.DATA_是未定义的,我猜jest是在嘲笑它,出于这个原因,常量是未定义的,我在下一个版本中尝试了我能找到的一切,但它仍然未定义 有人能帮忙吗。我会非常感激的 navAction.js: var dispatcher = require('../dispatcher/AppDispatcher'); var constants = require('../constan

当我在下面运行navAction-test.js时,我得到以下错误:TypeError:无法读取未定义的

据我所知,加载的常量.DATA_是未定义的,我猜jest是在嘲笑它,出于这个原因,常量是未定义的,我在下一个版本中尝试了我能找到的一切,但它仍然未定义

有人能帮忙吗。我会非常感激的

navAction.js:

var dispatcher = require('../dispatcher/AppDispatcher');
var constants = require('../constants/constants');

module.exports = {

    load: function() {
    def = $.ajax({
        url: 'http://api.facebook.com/',
        data: {},
        success: function (data, textStatus, jqXHR) {
            dispatcher.dispatch({type: constants.DATA_LOADED, data: data});
        }
    });
    }
}
navAction-test.js:

jest.dontMock('../navAction.js');

describe('Tests NavigationCollectionActionCreators', function() {

    var $;
    var dispatcher;
    var navAction;

    beforeEach(function() {
    $ = require('jquery');
    dispatcher = require('../../dispatcher/AppDispatcher');
    navAction  = require('../navAction.js');
    });

    it('tests calls $.ajax & dispatcher ', function () {
    navAction.load();
    $.ajax.mock.calls[0][0].success({body: {header: {items: [{name: 'The name', link: 'http://www.facebook.com'}]}}});

    expect(dispatcher.dispatch).toBeCalledWith({type: 'DATA_LOADED', data: [{name: 'The name', link: 'http://www.timeout.com'}]});
    });

});

//constants.js
var keyMirror = require('keymirror');

module.exports = keyMirror({
    DATA_LOADED: null,
});
var constants = {
    DATA_LOADED: 'DATA_LOADED',
    DATA_NOT_LOADED: 'DATA_NOT_LOADED'
};
jest.setMock('../../constants/constants', constants);
更新:

我通过在navAction-test.js中添加以下内容实现了这一点:

jest.dontMock('../navAction.js');

describe('Tests NavigationCollectionActionCreators', function() {

    var $;
    var dispatcher;
    var navAction;

    beforeEach(function() {
    $ = require('jquery');
    dispatcher = require('../../dispatcher/AppDispatcher');
    navAction  = require('../navAction.js');
    });

    it('tests calls $.ajax & dispatcher ', function () {
    navAction.load();
    $.ajax.mock.calls[0][0].success({body: {header: {items: [{name: 'The name', link: 'http://www.facebook.com'}]}}});

    expect(dispatcher.dispatch).toBeCalledWith({type: 'DATA_LOADED', data: [{name: 'The name', link: 'http://www.timeout.com'}]});
    });

});

//constants.js
var keyMirror = require('keymirror');

module.exports = keyMirror({
    DATA_LOADED: null,
});
var constants = {
    DATA_LOADED: 'DATA_LOADED',
    DATA_NOT_LOADED: 'DATA_NOT_LOADED'
};
jest.setMock('../../constants/constants', constants);
这是正确的方法吗?

添加到测试:

jest.dontMock('../constants/constants');
如果您根本不想使用自动模拟,您可以删除所有的
jest.dontMock
,然后放置:

jest.autoMockOff();

我认为你解决问题的方法(在底部的更新中)不合适,因为它违反了DRY(不要重复你自己)。添加另一个动作常量时会发生什么?现在,您必须记住在测试中也添加它。这是有问题的。

我已经更新了上面的代码块,添加了所需的常量