测试从 useTranslation 返回的对象
testing object returned from useTranslation
我的元素中有以下代码:
ItemComponent
const { t } = useTranslation('myjson')
const myobject = t('myobject', { returnObjects: true })
const renderContent = () => {
return myobject.map(item => {
return (<Item key={item} onClick={() => props.handleClick(item.name)}> <Icon type={item.iconType} />{item.name}</Item>)
}
})
}
ItemComponent.test.js
it("renders without crashing", () => {
const div = document.createElement("div");
ReactDOM.render(<ItemComponent></ItemComponent>,div);
})
myjson
{
"myobject":[
{
"name": "Name1",
"iconType": "Icon1"
},
{
"name": "Name2",
"iconType": "Icon2"
}
]
}
和一个简单的渲染测试但是当我 运行 测试时我收到错误 myobject.map is not a function
有没有办法正确测试这个?不确定为什么会出现此错误,所以我不知道要研究或尝试什么
我试过 let entries = Object.keys(myobject).map((key)=>[Number(key), mybject[key]])
然后 console.log("entries",typeof entries);
这还是returns一个对象
问题似乎是在变量 records 为 null 的情况下,您的渲染函数仍然尝试访问您的 records 变量的 map 函数,这当然以 'TypeError: myobject.map is not a function' 错误结束。
试试这个
myobject && myobject.map(item => {.....})
或在状态中添加数组,然后从状态中使用它
由于在代码中我返回了对象,我需要在使用翻译的同时模拟该对象:
const mock = {
"myobject":[
{
"name": "Name1",
"iconType": "Icon1"
},
{
"name": "Name2",
"iconType": "Icon2"
}
]
}
jest.mock('react-i18next', ()=>({
useTranslation: () => {
return {
t:(str)=>mock,
i18:{
changeLanguage: () => new Promise(()=>mock.myobject)
}
}
}
})
我的元素中有以下代码:
ItemComponent
const { t } = useTranslation('myjson')
const myobject = t('myobject', { returnObjects: true })
const renderContent = () => {
return myobject.map(item => {
return (<Item key={item} onClick={() => props.handleClick(item.name)}> <Icon type={item.iconType} />{item.name}</Item>)
}
})
}
ItemComponent.test.js
it("renders without crashing", () => {
const div = document.createElement("div");
ReactDOM.render(<ItemComponent></ItemComponent>,div);
})
myjson
{
"myobject":[
{
"name": "Name1",
"iconType": "Icon1"
},
{
"name": "Name2",
"iconType": "Icon2"
}
]
}
和一个简单的渲染测试但是当我 运行 测试时我收到错误 myobject.map is not a function
有没有办法正确测试这个?不确定为什么会出现此错误,所以我不知道要研究或尝试什么
我试过 let entries = Object.keys(myobject).map((key)=>[Number(key), mybject[key]])
然后 console.log("entries",typeof entries);
这还是returns一个对象
问题似乎是在变量 records 为 null 的情况下,您的渲染函数仍然尝试访问您的 records 变量的 map 函数,这当然以 'TypeError: myobject.map is not a function' 错误结束。
试试这个
myobject && myobject.map(item => {.....})
或在状态中添加数组,然后从状态中使用它
由于在代码中我返回了对象,我需要在使用翻译的同时模拟该对象:
const mock = {
"myobject":[
{
"name": "Name1",
"iconType": "Icon1"
},
{
"name": "Name2",
"iconType": "Icon2"
}
]
}
jest.mock('react-i18next', ()=>({
useTranslation: () => {
return {
t:(str)=>mock,
i18:{
changeLanguage: () => new Promise(()=>mock.myobject)
}
}
}
})