您好,我是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

它接受具有getAttributesetAttribute属性的对象数组,以及表示键​​/值对的对象。

与其通过创建模拟的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/

10-09 23:48