尝试为以下函数编写单元测试。
我收到错误
TypeError: sentimentCurrent.map is not a function
65 | console.log("sentimentData:",sentimentCurrent,typeof sentimentCurrent);
66 |
> 67 | sentimentCurrent.map(function (k, num) {
| ^
68 | let dateCreated = new Date(k.created * 1000);
69 |
70 | DataInput.push({
实际函数如下,它接收原始数据,然后准备将其用于线形图中。
export default function generateLineGraphPointsSentiment(
sentimentData
) {
if (sentimentData !=null) {
const DataInput = [];
Object.keys(sentimentData).map(function (key, item) {
var sentimentCurrent = sentimentData[key];
sentimentCurrent.map(function (k, num) {
let dateCreated = new Date(k.created * 1000);
DataInput.push({
created: dateCreated,
sentiment: k.sentiment,
magnitude: k.magnitude,
date: k.createdDay,
});
});
// {created: 1601820360, sentiment: -0.1, magnitude: 0.1, createdDay: "2020-10-05"}
});
return DataInput
}
else { return 0 }
}
测试用例如下,
import '@testing-library/jest-dom';
import { render, screen } from '@testing-library/react';
import generateLineGraphPointsSentiment from './generateGraphPointsAnalysis';
const ExpressionData = [
{
"2021-08-21": [
{
"id": 96451,
"user_id": "xxxx",
"sentiment": 0.4,
"magnitude": 1,
"created": 1629535058,
"createdDay": "2021-08-21"
},
{
"id": 96452,
"user_id": "xxx",
"sentiment": -0.1,
"magnitude": 1,
"created": 1629535060,
"createdDay": "2021-08-21"
},
]
}
// const setSelectedDate = jest.fn();
describe('Generates Graph Points Sentiment', () => {
it('should show loader for the LineGraphs graph if no data is present', () => {
generateSentimentLineGraph = generateLineGraphPointsSentiment(SentimentData);
console.log(generateSentimentLineGraph,SentimentData,typeof SentimentData);
expect(generateSentimentLineGraph).toHaveReturned();
});
});
对我的代码有什么问题有什么想法吗?它目前在开发中工作,不知道为什么现在测试失败了?我认为这与正在处理的数据类型或我如何使用 map 函数有关。也许我可以简化第一个 map 功能?
更新了测试数据以复制开始时发生的情况,第一个 map 数据之后是这样的,
[
{
"id": 96451,
"user_id": "xxx",
"sentiment": 0.4,
"magnitude": 1,
"created": 1629535058,
"createdDay": "2021-08-21"
},
{
"id": 96452,
"user_id": "xxx",
"sentiment": -0.1,
"magnitude": 1,
"created": 1629535060,
"createdDay": "2021-08-21"
},
]
请记住,当前在折线图中使用此方法是有效的,就像 ReCharts 库中的这样,
<LineChart
width={550}
height={250}
data={Sentiment}
syncId="anyId"
margin={{
top: 10,
right: 30,
left: 0,
bottom: 0,
}}
>
很好的答案,现在适用于测试,但是在开发环境中加载时我奇怪地收到此错误,
最佳答案
如果功能正常 - 我认为问题出在您的 const SentimentData
上.
因为从表面上看,Object.keys(sentimentData)
预计sentimentData
成为一个“正确”的对象,例如 {key: "bla"}
。相反,您给它一个数组,从技术上讲,它仍然是一个对象,因此对于两个元素的数组,您将获得两个键: ["0", "1"]
.
然后你就sentimentCurrent = sentimentData[key];
与 sentimentCurrent = sentimentData["0"];
相同它只是重新调整数组中的第一个或第二个对象。
然后你尝试运行 Array.map()
对一个没有意义的对象执行函数。
所以,我的建议是,如果功能按预期工作,请尝试记录您的 sentimentData
并相应地更新测试中的模拟数据。
这应该有效:
function generateLineGraphPointsSentiment(sentimentData) {
if (sentimentData != null) {
const DataInput = [];
Object.keys(sentimentData).map(function (key, item) {
var sentimentCurrent = sentimentData[key];
sentimentCurrent.map(function (k, num) {
let dateCreated = new Date(k.created * 1000);
DataInput.push({
created: dateCreated,
sentiment: k.sentiment,
magnitude: k.magnitude,
date: k.createdDay,
});
});
// {created: 1601820360, sentiment: -0.1, magnitude: 0.1, createdDay: "2020-10-05"}
});
return DataInput;
}
}
const SentimentData = {
"2021-08-21": [
{
id: 96451,
user_id: "xxxx",
sentiment: 0.4,
magnitude: 1,
created: 1629535058,
createdDay: "2021-08-21",
},
{
id: 96452,
user_id: "xxx",
sentiment: -0.1,
magnitude: 1,
created: 1629535060,
createdDay: "2021-08-21",
},
],
};
const generateSentimentLineGraph = generateLineGraphPointsSentiment(SentimentData);
console.log(generateSentimentLineGraph);
关于javascript - TypeError : sentimentCurrent. map 不是一个函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70796933/