diff --git a/lib/validator.js b/lib/validator.js index b281ff2..73d8696 100644 --- a/lib/validator.js +++ b/lib/validator.js @@ -235,8 +235,9 @@ class Validator { res.source = res.source.replace(/%%INDEX%%/g, rule.index); const fn = new Function("value", "field", "parent", "errors", "context", res.source); context.fn[rule.index] = fn; - sourceCode.push(this.makeCustomValidator({vName: resVar, path: customPath, schema: rule.schema, context, messages: rule.messages, ruleIndex: rule.index})); sourceCode.push(this.wrapRequiredCheckSourceCode(rule, innerSrc.replace(/%%INDEX%%/g, rule.index), resVar)); + sourceCode.push(this.makeCustomValidator({vName: resVar, path: customPath, schema: rule.schema, context, messages: rule.messages, ruleIndex: rule.index})); + } else { sourceCode.push(this.wrapRequiredCheckSourceCode(rule)); } diff --git a/test/rules/multi.spec.js b/test/rules/multi.spec.js index e1ce797..1979dc4 100644 --- a/test/rules/multi.spec.js +++ b/test/rules/multi.spec.js @@ -2,7 +2,7 @@ const Validator = require("../../lib/validator"); const v = new Validator({ - useNewCustomCheckerFunction: true + useNewCustomCheckerFunction: true, }); describe("Test rule: multi", () => { @@ -28,7 +28,7 @@ describe("Test rule: multi", () => { expect(fn).toBeCalledWith("s", [], schema.rules[0], "$$root", null, expect.any(Object)); }); - it("should value equals to other field", () => { - // TODO: move from validator.spec.js - }); + // it("should value equals to other field", () => { + // // TODO: move from validator.spec.js + // }); }); diff --git a/test/validator.spec.js b/test/validator.spec.js index 880f1f5..90c5062 100644 --- a/test/validator.spec.js +++ b/test/validator.spec.js @@ -428,7 +428,7 @@ describe("Test custom validation v1", () => { }); }); -describe("Test custom validation v2", () => { +describe("Test custom validation", () => { const v = new Validator({ useNewCustomCheckerFunction: true, messages: { @@ -468,6 +468,25 @@ describe("Test custom validation v2", () => { expect(check({num: 18})[0].type).toEqual("numberMax"); expect(check({num: 13})[0].type).toEqual("evenNumber"); }); + + it("should call checker function after build-in rule", () => { + // depended to number rule + const checkerFn = jest.fn((v) => v); + + const schema = { + a: { + type: "number", + convert: true, + custom: checkerFn + } + }; + const check = v.compile(schema); + const o = { a: "123" }; + + expect(check(o)).toBe(true); + expect(checkerFn).toBeCalledTimes(1); + expect(checkerFn.mock.calls[0][0]).toBe(123); + }); }); describe("Test default settings", () => {