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

标签 javascript facebook reactjs jestjs

当我在下面运行 navAction-test.js 时,出现以下错误:TypeError: Cannot read property 'DATA_LOADED' of undefined

据我所知,constant.DATA_LOADED 是未定义的,我猜开 Jest 是在 mock 它,因此 constant 是未定义的,我已经尝试了下一个可以找到的所有内容,但它仍然未定义。

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

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(不要重复你自己)。当你添加另一个 Action 常量时会发生什么?现在您还必须记住将它添加到测试中。这是有问题的。

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

相关文章:

Javascript var 声明与等效声明

javascript - react-router-dom - 将参数添加到索引 url 但接受页面

javascript - 如何计算点击次数并在循环javascript中更改其值?

javascript - Webpack 中的 -p 是什么?

javascript - 为什么这个循环会破坏我的代码?

objective-c - 在 ios 6.0 上使用 facebook sdk 3.1 将视频上传到 facebook

ios - 如何使用 SLRequest 获取大尺寸的 facebook 个人资料图片?

android - 如何在 Android 应用程序中使用多个 Graph API 获取 Facebook Notes 项目的评论?

javascript - 如何正确加载图片路径?

node.js - 在 socket.io-client Reactjs 中多次发出相同的事件