javascript - 常量不适用于 Action 中的 Jest 测试

原文 标签 javascript facebook reactjs jestjs

当我在下面运行navAction-test.js时,出现以下错误:TypeError:无法读取未定义的属性“ DATA_LOADED”

据我所知,常量。DATA_LOADED是未定义的,我猜是在开玩笑,并且由于这个原因,常量是未定义的,我已经尝试了下一个可以找到的所有内容,但是它仍然是未定义的。

有没有人可以提供帮助。我真的很感激。

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


更新:

我通过将以下内容添加到navAction-test.js中来使其工作:

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(请勿重复自己)。当您添加另一个动作常量时会发生什么?现在,您还必须记住将其添加到测试中。那是有问题的。

关于javascript - 常量不适用于 Action 中的 Jest 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30056777/

相关文章:

javascript - Javascript,如果条件无法按预期工作

facebook - Facebook 推荐栏是否适用于非开发者用户?

javascript - React-根据react-select selectedOption渲染某些div

javascript - ReactJS:在 Prop 未定义的情况下使用条件式安全吗?

javascript - GM_registerMenuCommand 未定义

javascript - 如何使用JavaScript更改页面URL

facebook - Facebook显示带有ssl页的空白页

reactjs - 如何在 React 应用程序中渲染 React 应用程序(嵌套的 React 应用程序)

java - 将 Action 属性传递给JavaScript函数

android - 在 Android 中将 ActionChooser 与附件一起用于电子邮件和 Facebook 应用程序