Knockout.js 淘汰:正则表达式和所需的验证重叠?韩元';我不能通过考试

Knockout.js 淘汰:正则表达式和所需的验证重叠?韩元';我不能通过考试,knockout.js,jasmine,knockout-validation,Knockout.js,Jasmine,Knockout Validation,在ViewModel中,我有几个属性,它们具有必需的和正则表达式验证(在同一个属性上),如下所示: // ...other properties... MaxDays: ko.observable("").extend({ required: { message: "You have to specify the maximum number of days." }, pattern: { message: "Pl

在ViewModel中,我有几个属性,它们具有必需的和正则表达式验证(在同一个属性上),如下所示:

// ...other properties...
MaxDays: ko.observable("").extend({
    required: { message: "You have to specify the maximum number of days." },
    pattern: {
        message: "Please enter a valid number.",
        params: '[0-9]+$',
        maxLength: 10
    }
}),
// ...other properties...
我使用Jasmine进行测试,我注意到如果我指定了一个与表达式不匹配的值,该值将被忽略,它将运行自己的“required”测试,就好像该属性中没有数据一样

// ... describe, other "it" statements, etc...
it("should complain if there's incorrect data", function () {

    viewModel.MaxDays("Zweiundzwanzig");

    expect(viewModel.errors().length).toBeGreaterThan(0);
    expect(viewModel.errors()).toContain('Please enter a valid number.');

    console.log(viewModel.errors());

});
// ...
当我运行测试时,它失败了。errors集合中填充了一个错误,但这不是因为我输入了一个字符串,而它应该是一个数字。它失败是因为它认为属性是空的。我从“required”而不是从“pattern”获取错误消息:

有趣的是,它在UI上工作,因此如果我在绑定到该属性的字段上键入一个字符串值,它将触发正则表达式验证,并将正确的错误消息放在字段旁边


有人能指出我在这里遗漏了什么吗?

如果错误类型发生更改,knockout.validation.group.errors()当前无法正确更新(请参阅)


我想这是你的问题。尝试将“MaxDays”设置为正确值,然后设置为无效值。如果这是您的问题,则应修复测试。

如果错误类型发生更改,则knockout.validation.group.errors()当前无法正确更新(请参阅)

我想这是你的问题。尝试将“MaxDays”设置为正确值,然后设置为无效值。如果这是你的问题,那应该可以解决测试问题