2017-08-08 80 views
0

我正在努力學習jest。我一直在一次又一次地陷入同樣的​​問題。例如,滿足在Jest測試中undefined的值

TypeError: Cannot read property 'value' of undefined

這是來自我一次清除一個錯誤鏈。在這一行中,

const languageName = _.findWhere(languages, { key: this.props.screenProps.user.get('language') }).value; 

它以用戶開始,get,現在value未定義。我添加到用戶對象中的前2個錯誤然後在渲染組件時作爲道具傳遞了對象。但是,當我增加價值的用戶對象仍然說

'value' of undefined

測試

const tree = renderer.create(
     <ProfileScreen screenProps={{ user }} /> 
); 

用戶對象

module.exports = { 
    id: '0052C000000gFJrQAM', 
    name: 'Bob Barker', 
    language: 'en', 
    get: language => language, 
    value: 'English (US)', 
}; 

問題

將「value」添加到對象的正確方法是什麼,以便它停止拋出錯誤並呈現組件?

回答

0

根據Underscore.js

findWhere_.findWhere(list, properties)

Looks through the list and returns the first value that matches all of the key-value pairs listed in properties.

If no match is found, or if list is empty, undefined will be returned.

在你的情況的文件,你的測試正在作業,因爲findWhere沒有找到任何匹配,因此將返回不確定的和你想上訪問值未定義的變量。

你應該做的是在訪問結果之前檢查findWhere是否發現了某些東西。

const language = _.findWhere(languages, { key: this.props.screenProps.user.get('language') }); 

const languageName = (language !== 'undefined') ? language.value() : 'No language found'); 

或者,如果你真的確信findWhere總是會返回一個值,你應該修改你的測試化妝findWhere從未不確定。這取決於很多來自您的語言列表的地方。