我尝试使用Jest测试我的应用程序的redux操作。我已经查看了测试网站@redux.js.org和其他论坛帖子,但我不明白我为什么会收到错误,我想我还没弄到嘲弄作品。
我的行动是在index.js:
export const setResponse = (res) => {
return {
type: 'RESPONSE_RECEIVED',
payload: res
}
};
我的测试是actions.test.js:
import * as actions from '../src/client/scripts/actions/index'
describe('actions', () => {
it('should create an action to receive a response', () => {
const payload = {response: 'solr_json'};
const expectedAction = {
type: 'RESPONSE_RECEIVED',
payload
}
expect(actions.setResponse(payload)).toEqual(expectedAction)
})
});
我收到错误'预期未定义为等于对象...'所以我认为actions.setResponse并不存在,所以我打印出actions.setResponse,它看起来像这样:
{ [Function: setResponse]
_isMockFunction: true,
getMockImplementation: [Function],
mock: { calls: [], instances: [] },
mockClear: [Function],
mockReturnValueOnce: [Function],
mockReturnValue: [Function],
mockImplementationOnce: [Function],
mockImpl: [Function],
mockImplementation: [Function],
mockReturnThis: [Function] }
所以似乎函数在那里,我如何在Jest测试中实际调用函数?即使我改变了
export const setResponse = (res) =>
到
export function setResponse(res)
(所以它与redux.js.org教程的格式相同)我得到了同样的错误。作为参考,这是我的package.json的开玩笑部分:
"jest": {
"scriptPreprocessor": "node_modules/babel-jest",
"testFileExtensions": [
".test.js"
],
"testPathDirs": [
"__tests__"
],
"moduleFileExtensions": [
"js"
],
"unmockedModulePathPatterns": [
"node_modules/react",
"node_modules/react-addons-test-utils",
"node_modules/react-dom"
]
}
感谢您的帮助
答案 0 :(得分:1)
问题似乎是您要测试的模块被模拟,导致您使用app.controller('speshController',function($scope,$http){
$scope.data=[{
'value':1,
'name':'aaa'
},{
'value':2,
'name':'bvc'
},{
'value':3,
'name':'rtcv'
},{
'value':4,
'name':'uytg'
}
]
$scope.listOfRestaurant=[];
angular.forEach($scope.data,function(obj){
var data={'name':obj.name,'value':obj.value};
$scope.listOfRestaurant.push(data);
})
$scope.getValue=function(){
}
})
。来自文档:
与所有匹配的正则表达式模式字符串数组 模块加载器之前的模块将自动返回模拟 他们。如果模块的路径与此列表中的任何模式匹配,则为 不会被模块加载器自动模拟。
我猜想如果删除此行,模块不会自动模拟。通常,使用unmockedModulePathPatterns
更容易模拟您想要在测试中直接模拟的内容。或者您将源文件夹添加到jest.mock
。