jestjs - 期望数组参数具有设置长度

标签 jestjs

我对 Jest 有点陌生,所以如果这是一个明显的答案,请原谅我,但在滚动浏览文档后我找不到答案。

我有一个函数 (funcA),它将一个不同长度的数组传递给另一个函数 (funcB),具体取决于 funcA 的参数收到。我正在尝试根据我提供给 funcA 的参数来测试传递给 funcB 的数组的长度是否正确。我并不关心数组的内容,只是它有一定的长度。这是我目前的尝试:

// Modules
const funcA = require('./funcA')

// Mock
const funcB = jest.fn(pairs => {
    return pairs[0]
})

// Test
test('Should pass array of 3623 length', () => {
    const result = funcA(75)
    
    expect(result).toBeInstanceOf(Object)
    expect(funcB).toHaveBeenCalledWith(expect.any(Array).toHaveLength(3623))
})

我想尝试使用 any()如果可以,但以下测试会导致错误:

TypeError: expect.any(...).toHaveLength is not a function

即使我将 expect.any(...) 包装在另一组括号中,我也会收到相同的错误。有什么方法可以实现我想要的吗?

最佳答案

只断言数组长度而忽略数组内容的测试没有什么值(value)。越具体越好。如果需要特定的数组,可以将其指定为夹具。

此断言无法工作,因为 toHaveBeenCalledWith 应该是预期结果,并且不能包含另一个断言 toHaveLength

为了用包含任何元素的数组断言 toHaveBeenCalledWith,它应该是:

expect(funcB).toBeCalledWith(Array(3623).fill(expect.anything()))

另一种选择是直接断言参数:

expect(funcB).toBeCalledWith(expect.any(Array))
expect(funcB.mock.calls[0][0]).toHaveLength(3623))

关于jestjs - 期望数组参数具有设置长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64198066/

相关文章:

reactjs - 使用 preloadedState : redux store gets out of sync when having a manual import of store in a function 在 React 中进行测试

reactjs - 如何编写单元测试来调用 useEffect 中的函数?

javascript - Jest - 断言异步函数引发测试失败

javascript - 开 Jest 测试将变量传递给另一个测试

javascript - 模拟类是从带有 jest 的包导入的对象的属性

react-native - 无效或意外的 token ,测试裸 react native 应用程序

angular - 从 Angular 5 测试中触发输入事件

javascript - 使用 es6 导入未定义错误

typescript - 没有为 ts-jest 和 puppeteer 定义浏览器

jestjs - Jest 全局变量示例