您好,我是JS的新手,可能是代码中的错误。
但是我不明白为什么getAttribute
不是函数。
测试:
test('TESTING', () => {
const filterNodes = [
<div key='1' value='foo' />,
<div key='2' value='bar' />
]
const filtersKeyValue = {
key: ['0', '1', '1', '3'],
value: ['foo', 'bar', 'toto', 'react']
}
expect(fillReportSpecFiltersWithValues(filterNodes, filtersKeyValue)).toBe()
})
码:
export const fillReportSpecFiltersWithValues = (filterNodes, filtersKeyValue = {}) => {
for (const key in filtersKeyValue) {
const value = filtersKeyValue[key]
for (const filterNode of filterNodes) {
if (filterNode.getAttribute('key') === key) {
filterNode.setAttribute('value', value)
}
}
}
}
任何建议都非常感谢?
最佳答案
听起来您的工作就是测试fillReportSpecFiltersWithValues
。
它接受具有getAttribute
和setAttribute
属性的对象数组,以及表示键/值对的对象。
与其通过创建模拟的DOM元素进行测试,不如通过创建适当的模拟对象进行测试:
test('fillReportSpecFiltersWithValues', () => {
const filterNodes = [
{ getAttribute: () => '1', setAttribute: jest.fn() },
{ getAttribute: () => '2', setAttribute: jest.fn() },
{ getAttribute: () => '3', setAttribute: jest.fn() }
]
const filtersKeyValue = {
'1': 'foo',
'2': 'bar'
}
fillReportSpecFiltersWithValues(filterNodes, filtersKeyValue);
expect(filterNodes[0].setAttribute).toHaveBeenCalledWith('value', 'foo'); // Success!
expect(filterNodes[1].setAttribute).toHaveBeenCalledWith('value', 'bar'); // Success!
expect(filterNodes[2].setAttribute).not.toHaveBeenCalled(); // Success!
});
关于javascript - .getAttribute不是函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57807957/