当我在下面运行 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/