jest matcher匹配三个值中的任何一个

HVe*_*nom 8 javascript reactjs jestjs

我在我的组件中有这个选择器,其默认状态是'' (empty)字符串,但是当change事件被触发时,用户可以选择三个值中的任何一个,即6,12或24

it("feedform testing the selector feed frequency for value of 6, 12, 24 ", () => {
  const addFeedForm = shallow(
    <FeedForm
      submitForm={() => {}}
      setFeedData={() => {}}
      formType="add"
      feedsubmit={{
        status: null,
        error: {
          formsubmitwarning: "",
          feedname: "",
          feedurl: "",
          feedposttype: "",
          feedfrequency: "",
          feedpost: "",
          feedhashtag: "",
          formloginid: ""
        }
      }}
    />
  );
  expect(addFeedForm.state().feedfrequency).toEqual("");
  addFeedForm.simulate("change");
  expect(addFeedForm.state().feedfrequency).toEqual(6 || 12 || 24);
});
Run Code Online (Sandbox Code Playgroud)

现在在为此编写单元测试用例时,我很快通过jest文档找到三个值中的任何一个的匹配器,但发现没有匹配器执行此操作

我甚至尝试使用|| (or)operator in toEqualtoBematcher,但是你猜对它没有用,是否有办法使它工作或者我应该一起跳过测试.

注意:我正在使用酶和开玩笑

Shu*_*tri 15

为了达到预期值之一,您可以反转比较并使用toContain类似方法对其进行测试

expect(addFeedForm.state().feedfrequency).toEqual('');
addFeedForm.simulate('change');
expect([6, 12, 24]).toContain(addFeedForm.state().feedfrequency) 
Run Code Online (Sandbox Code Playgroud)


Tac*_*tex 11

jest-extended库提供了一个.toBeOneOf([members])匹配器:

it("feedform testing the selector feed frequency for value of 6, 12, 24 ", () => {
  expect(addFeedForm.state().feedfrequency).toBeOneOf([6, 12, 24]);
});
Run Code Online (Sandbox Code Playgroud)


jor*_*ake 9

实现这一点的另一种方法是在 Jest 的断言之外进行比较,并简单地期望它是真的:

expect(
    addFeedForm.state().feedfrequency === 6 ||
    addFeedForm.state().feedfrequency === 12 ||
    addFeedForm.state().feedfrequency === 24
).toBe(true)
Run Code Online (Sandbox Code Playgroud)

  • 这种方法的缺点是断言没有导致问题的实际数据,而 [`toContain`](https://jestjs.io/docs/en/expect#tocontainitem) 会突出显示此类数据。 (2认同)
  • 扩展上述内容:除非您实际上正在测试返回布尔值的东西,否则永远不要使用“expect(value).toBe(true)”,因为[diagnostics](http://forming-object-orient-software .com/figures/feedback-on-diagnostics.svg)的“预期错误为真”是非常无用的。 (2认同)

Aug*_*oia 8

Jest API 上没有匹配多个值的方法。

进行此检查的一种方法是使用正则表达式:

expect(String(addFeedForm.state().feedfrequency)).toMatch(/^6|12|24$/);
Run Code Online (Sandbox Code Playgroud)