yup.js条件检查数组

时间:2018-12-11 15:23:06

标签: javascript validation testing yup

我有一个对象,其标志为boolean,另一项为对象数组。

仅当标志为true时,我才想检查对象数组。

所以:

{
  shouldCheck: false
}

这应该通过

{
  shouldCheck: true
}

这应该打破

{
  shouldCheck: true,
  rules: []
}

这应该打破

{
  shouldCheck: true,
  rules: [1]
}

这应该打破

{
  shouldCheck: true,
  rules: [{other: 'xx'}]
}

这应该打破

{
  shouldCheck: true,
  rules: [right: 'one']
}

这应该通过

yup模式:

const delaySchema = yup.object().shape({
  shouldCheck: yup.boolean(),
  rules: yup.mixed()
    .when(['shouldCheck'], {
      is: (sck) => {
        return sck;
      },
    then: yup.array().of(yup.object().shape({
      right: yup.string().required(),
    })),
    otherwise: yup.mixed().nullable()
  }),
});

现在这里的问题是它忽略了内部值并且不检查它们。

1 个答案:

答案 0 :(得分:1)

尝试在条件前使用yup。 array()

const delaySchema = yup.object().shape({
  shouldCheck: yup.boolean(),
  rules: yup.array()
    .when(['shouldCheck'], {
      is: (sck) => {
        return sck;
      },
    then: yup.array().of(yup.object().shape({
      right: yup.string().required(),
    })),
    otherwise: yup.mixed().nullable()
  }),
});