【发布时间】:2020-02-03 15:57:31
【问题描述】:
我正在使用 chai 尝试对我在网上找到的验证功能进行单元测试。此验证功能正在“react-final-form”组件内部使用。
这是我从这里得到这个验证器函数的地方:
https://youtu.be/OEg8jm-NbQ0?t=567
import chai, { expect } from "chai";
import chaiEnzyme from "chai-enzyme";
chai.use(chaiEnzyme());
const required = (value) => value === '' ? 'This is required.' : undefined;
const url = (value) => value && !(/^\/[a-z0-9]+$|[-a-zA-Z0-9@:%_\+.~#?&//=]{2,256}\.[a-z]{2,4}\b(\/[-a-zA-Z0-9@:%_\+.~#?&//=]*)?/gi).test(value) ? 'This does not appear to be a link.': undefined;
const composeValidators = (...validators) =>
(value) =>
validators.reduce((error, validator) => error || validator(value), undefined);
let value = '';
describe("Forms", () => {
describe("Final form", () => {
describe("Utils", () => {
it("Returns correct error message when form field value is empty and field is required", () => {
expect(composeValidators(required)).to.equal('This is required.');
});
it("Returns correct error message when form field value is not empty and field should be a url", () => {
value = 'not empty';
expect(composeValidators(url)).to.equal('This does not appear to be a link.');
});
});
});
});
目前这两个断言都返回 [function] 而不是我期望的字符串值,我不知道为什么。任何有关如何修复此测试的想法将不胜感激。
【问题讨论】:
-
看起来
url是一个函数的引用,我想你需要调用composeValidators(url(value))和composeValidators(required("some value?")) -
我试过这样做,遗憾的是两个函数仍然返回 [function]
-
还有其他人的想法吗?
-
composeValidators(required, url, ...)("").to.equal("This is required")或composeValidators(required, url, ...)("https://*.com").to.equal(undefined)- 切勿使用您不理解的代码。
标签: javascript functional-programming tdd enzyme chai