从 react-dates
构建一个组件,我有这样的东西:
<DayPickerRangeController
// some props...
isDayBlocked={day => isDayBlocked(a, someObject)}
/>
我想测试我是否正确传递 day => isDayBlocked(a, someObject)
形式的函数。
所以在我的测试中我有:
import isDayBlocked from './isDayBlocked'
jest.mock('./isDayBlocked', () => () => {})
然后进行测试:
expect(wrapper.find(DayPickerRangeController).props().isDayBlocked).toBe(
() => isDayBlocked,
);
但我收到:
expect(received).toBe(expected) // Object.is equality
Expected: [Function anonymous]
Received: [Function isDayBlocked]
怎样才能让测试通过?
最佳答案
您正在尝试匹配函数的主体。这是行不通的。您可以比较 .toString()
结果,但可以肯定的是,这并不意味着相同的正文文本意味着相同的执行(因为使用了闭包/全局变量)。
那么你能做什么呢?
您可以像测试任何其他函数一样测试传入的函数:提供不同的输入并对输出进行断言。
wrapper.callSomethingToChangeState();
expect(wrapper.find(DayPickerRangeController).props().isDayBlocked('day1'))
.toBeFalsy();
expect(wrapper.find(DayPickerRangeController).props().isDayBlocked('day2'))
.toBeFalsy();
expect(wrapper.find(DayPickerRangeController).props().isDayBlocked('day3'))
.toBeTruthy();
如果您的 isDayBlocked
取决于组件的某些内部状态,您可能需要编写几个不同的 it()
来覆盖不同的输入数据类
关于javascript - 用 Jest 检查传递的函数作为 prop,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54628152/