1

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を使用してテストしていますが、式と一致しない値を割り当てると、その値は無視され、そのプロパティにデータがないかのように「必須」の独自のテストが実行されることに気付きました。

// ... 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());

});
// ...

テストを実行すると失敗します。エラーコレクションはエラーでいっぱいですが、数値であるはずの文字列を入力したためではありません。プロパティが空であると見なされるため、失敗します。「pattern」からのメッセージではなく、「required」からエラーメッセージが表示されます。

ここに画像の説明を入力してください

面白い部分は、UIで機能することです。そのため、そのプロパティにバインドされたフィールドに移動して文字列値を入力すると、正規表現の検証が実行され、フィールドの横に正しいエラーメッセージが表示されます。

私がここで欠けているものを誰かが指摘できますか?

4

1 に答える 1

1

現在、エラータイプが変更された場合、knockout.validation.group.errors()は正しく更新されません(https://github.com/ericmbarnard/Knockout-Validation/issues/218を参照)。

これがあなたの問題だと思います。'MaxDays'を正しい値に設定してから、無効な値に設定してみてください。それがあなたの問題だった場合、それはテストを修正するはずです。

于 2013-02-08T21:50:28.963 に答える