如何重用 Yup 验证模式 + 声纳扫描显示在 yup 模式验证文件上有更多重复,它增加了重复覆盖率

How to reuse the Yup validation schema + sonar scan shown more duplication on yup schema validation files it increase the duplication coverage

我正在使用多种表单。在某些情况下,表单具有类似的字段,例如,姓名、phone 号码、帐号等。我也在使用 formik。我已经为每个表单创建了架构文件 (schema.js)。在里面我列出了所有的模式验证和return那个模式。

例如:schema.js

const schema = yup.object().shape({
 firmName: yup.string().label(Labels.FIRM).max(255)
});
export default schema;

如果我有 10 个具有 firmName 字段的表单,我的所有 schema.js 文件都具有以上属性 firmName。 我不确定如何分离它并重新使用它。 如果有人遇到并解决过类似的情况,请告诉我方法。 在上述编码方式中,声纳扫描中的重复百分比增加了。请帮助

我是这样做的:

const password = {
  password: yup.string().required().min(8),
};
const setupPassword = {
  ...password,
  confirmPassword: yup
    .string()
    .defined(t('password.confirm.required'))
    .test('passwords-match', t('password.confirm.match'), function (value) {
      return this.parent.password === value;
    }),
  agreeToTerms: yup.boolean().test('is-true', value => value === true),
};

export const SchemaPasswordValidation = yup.object().shape({
  ...setupPassword,
});

虽然接受的答案也可能有效我认为应该提到您现在可以使用方法“concat”连接两个模式:

const passwordSchema = yup.string().required().min(8);
const setupPassword = yup.object({ ...whatever you need here... }).concat(passwordSchema);
const schemaPasswordValidation = yup.object({ ...whatever you need here... }).concat(passwordSchema)

我相信这正是你想要做的。

仅供参考,如果您有基本架构并且想“扩展”它,您也可以这样做:

const baseSchema = yup.object({ ...base fields... });
const schema = baseSchema.shape({ ...specific fields... };

(但在你的情况下 concat 可能更好,因为 'passwordSchema' 不是其他两个模式的基础)