代码之家  ›  专栏  ›  技术社区  ›  FacundoGFlores

用jest检查作为prop的传递函数

  •  0
  • FacundoGFlores  · 技术社区  · 7 年前

    从中生成组件 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]
    

    我怎样才能通过考试?

    1 回复  |  直到 7 年前
        1
  •  1
  •   skyboyer    7 年前

    您正在尝试匹配函数的主体。这样不行。你可以比较 .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() 覆盖不同的输入数据类