Javascript 常量不可用于操作中的jest测试
当我在下面运行navAction-test.js时,我得到以下错误:TypeError:无法读取未定义的 据我所知,加载的常量.DATA_是未定义的,我猜jest是在嘲笑它,出于这个原因,常量是未定义的,我在下一个版本中尝试了我能找到的一切,但它仍然未定义 有人能帮忙吗。我会非常感激的 navAction.js: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
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(不要重复你自己)。添加另一个动作常量时会发生什么?现在,您必须记住在测试中也添加它。这是有问题的。我已经更新了上面的代码块,添加了所需的常量