javascript - 由于 .map 导致测试用例失败不是函数错误
问题描述
嗨,我有一个反应组件费用总计.js和相应的测试用例费用总计.test.js,如下所示。
费用-total.js
export default (expenses=[]) => {
if (expenses.length === 0) {
return 0;
} else {
return expenses
.map(expense => expense.amount)
.reduce((sum, val) => sum + val, 0);
}
};
费用-total.test.js
import selectExpensesTotal from '../../selectors/expenses-total';
const expenses = [
{
id: "1",
description: "gum",
amount: 321,
createdAt: 1000,
note: ""
},
{
id: "2",
description: "rent",
amount: 3212,
createdAt: 4000,
note: ""
},
{
id: "3",
description: "Coffee",
amount: 3214,
createdAt: 5000,
note: ""
}
];
test('Should return 0 if no expenses', ()=>{
const res = selectExpensesTotal([]);
expect(res).toBe(0);
});
test('Should correctly add up a single expense', ()=>{
const res = selectExpensesTotal(expenses[0]);
expect(res).toBe(321);
});
test('Should correctly add up multiple expenses',()=>{
const res = selectExpensesTotal(expenses);
expect(res).toBe(6747);
});
当我运行测试用例时,它因给出错误而失败
TypeError: expenses.map is not a function
我知道测试用例是正确的,但不知道组件有什么问题。谁能帮我解决这个错误?
解决方案
问题在于使用if (expenses.length === 0)
的测试用例selectExpensesTotal(expenses[0])
:
expenses[0]
传递一个没有length
属性的对象,因此在被测试的函数中,expenses.length
返回undefined
. 但是,undefined === 0
计算结果为,false
因此您的代码进入else
块尝试.map
在没有该功能的对象上使用,因此会引发错误。
推荐阅读
- javascript - React-native 版本未匹配尝试了堆栈溢出和其他平台上可用的所有解决方案
- c# - 如何从本地 HTML 文件获取更新的内容以显示在 UWP 应用程序的 WebView 中?
- dart - CupertinoSliverNavigationBar largeTitle 多行
- android - 如何暂时禁用屏幕上的所有触摸并再次启用它
- nginx - 使用 nginx 将 www 重定向到非 www godaddy
- ios - 让 WKWebView 覆盖整个屏幕
- django - Django - collectstatic 后出现 500 内部服务器错误
- android - Spotify 如何与 Android 上的默认时钟应用程序集成
- google-chrome - GQUIC 如何影响 WebRTC 流程?
- ios - 如何检查 SVG 文件验证?