当我在下面运行navAction-test.js时出现以下错误:TypeError:无法读取未定义的属性“DATA_LOADED”
据我所知,constant.DATA_LOADED是未定义的,我猜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,
});
更新:
我通过将以下内容添加到navAction-test.js来实现此目的:
var constants = {
DATA_LOADED: 'DATA_LOADED',
DATA_NOT_LOADED: 'DATA_NOT_LOADED'
};
jest.setMock('../../constants/constants', constants);
这是正确的做法吗?
答案 0 :(得分:1)
添加测试:
jest.dontMock('../constants/constants');
如果您根本不想使用自动锁定,则可以删除所有jest.dontMock
并改为放置:
jest.autoMockOff();
我认为你解决问题的方法(在底部的更新中)是不合适的,因为它违反了DRY(不要重复自己)。添加另一个动作常量会发生什么?现在你必须记住在测试中添加它。这是有问题的。