从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]
我如何通过测试?
答案 0 :(得分:1)
您正在尝试匹配函数的主体。这种方式行不通。您可以比较.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()
来涵盖不同的输入数据类