玩笑匹配器匹配三个值中的任何一个

时间:2018-07-25 12:35:32

标签: 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);
});

现在,在为此编写单元测试用例时,我迅速浏览了jest文档,以找到三个值中任意一个的匹配器,但没有找到匹配器

我什至尝试在|| (or)toEqual匹配器中使用toBe运算符,但由于您猜测它没有用,因此有一种方法可以使它起作用,或者我应该跳过所有测试在一起。

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

4 个答案:

答案 0 :(得分:12)

为了使期望值之一,您可以反转比较并使用toContain之类的方法进行测试

expect(addFeedForm.state().feedfrequency).toEqual('');
addFeedForm.simulate('change');
expect([6, 12, 24]).toContain(addFeedForm.state().feedfrequency) 

答案 1 :(得分:3)

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

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

expect(String(addFeedForm.state().feedfrequency)).toMatch(/^6|12|24$/);

答案 2 :(得分:2)

named route库提供了一个jest-extended匹配器:

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

答案 3 :(得分:1)

另一种实现此目的的方法是在Jest的断言之外进行比较,并简单地希望它是正确的:

expect(
    addFeedForm.state().feedfrequency === 6 ||
    addFeedForm.state().feedfrequency === 12 ||
    addFeedForm.state().feedfrequency === 24
).toBe(true)