如何重用 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' 不是其他两个模式的基础)
我正在使用多种表单。在某些情况下,表单具有类似的字段,例如,姓名、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' 不是其他两个模式的基础)