JSDOM рд╡рд░реНрддрдорд╛рди рдореЗрдВ HTML5 рдкреНрд░рдкрддреНрд░ рд╕рддреНрдпрд╛рдкрди рдФрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ checkValidity API рдХреЛ рд╣реИрдВрдбрд▓ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
HTML5 рд░реВрдкреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЖрдзреБрдирд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХрд╛ рд╕рдЯреАрдХ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ http://www.thecssninja.com/javascript/h5f рдХреЛ рд╢реБрд░реБрдЖрддреА рдмрд┐рдВрджреБ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕ рд╕рдорд░реНрдерди рдХреЛ рдЬреЛрдбрд╝рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ред H5F рдЙрди рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ HTML5 рдлреЙрд░реНрдо рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╢рд┐рдо рд╣реИ рдЬреЛ рдЙрдирдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдПрдХ рддрд░рдл, рдореБрдЭреЗ рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рд╕реНрд╡рдпрдВ рдЬреЛрдбрд╝рдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреА рдЕрдЧрд░ рдХреЛрдИ рдореБрдЭреЗ рдЗрд╕реЗ рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдмрддрд╛ рд╕рдХрддрд╛ рд╣реИред
рдореИрдВ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдФрд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ рдХрд╛рдлреА рдЙрдкрдХреНрд░рдо рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рд╣реИред
рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдмрдбрд╝реА рдЬрд░реВрд░рдд рдПрдХ рдареЛрд╕ рдкрд░реАрдХреНрд╖рдг рд╕реВрдЯ рд╣реИред рдпрджрд┐ рдЖрдк Contributing.md рджрд┐рд╢рд╛-рдирд┐рд░реНрджреЗрд╢реЛрдВ рдореЗрдВ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдХреБрдЫ рд╕рдВрдХреЗрдд рд╣реИрдВ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдХрд╣рд╛рдБ рдЦреЛрдЬрд╛ рдЬрд╛рдП, рдпрд╛ рдЗрд╕реЗ рд╡рд┐рдлрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХреМрди рд╕реА рдореЗрд▓рд┐рдВрдЧ рд╕реВрдЪреА рдкреВрдЫрдиреА рд╣реИред рдпрджрд┐ рдЖрдк рдЙрдиреНрд╣реЗрдВ рдЦреЛрдж рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╢реЙрдЯ рд╣реИ, рдЦрд╛рд╕рдХрд░ рдЬрдм рдЖрдк рдПрдЪ 5 рдПрдл рдХреЛ рд╢реБрд░реБрдЖрддреА рдмрд┐рдВрджреБ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВред
рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдПрдХрдорд╛рддреНрд░ рдЕрдиреНрдп рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣рд┐рд╕реНрд╕рд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ DOM рд╕реНрддрд░ 3 рд╕реЗ рдкрд░реЗ рдЪреАрдЬреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдЪрд┐рдд "рд╕реНрддрд░ 4" рдпрд╛ "рдПрдЪрдЯреАрдПрдордПрд▓ 5" рдлрд╝реЛрд▓реНрдбрд░ рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬрд┐рд╕рдХреА рд╣рдореЗрдВ рдереЛрдбрд╝реА рджреЗрд░ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ рдЙрд╕ рдкрд░ рдЬрд▓реНрджреА рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдПред
: +1: рдпрд╣ рдПрдХ рдмрдбрд╝реА рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реЛрдЧреАред
рдЕрднреА рдореИрдВ jsdom рд╕реЗрдЯрдЕрдк рдХреЗ рдмрд╛рдж https://github.com/hyperform/hyperform рдХреЛ рдкреЙрд▓реАрдлрд┐рд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛрдбрд╝ рд░рд╣рд╛ рд╣реВрдВред рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рд╡рд╛рд╣! рдореИрдВ рд╣рд╛рдЗрдкрд░рдлреЙрд░реНрдо рдХрд╛ рд▓реЗрдЦрдХ рд╣реВрдВред рдФрд░ рднрд╛рдЧреНрдп рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВ рдПрдХ рдкрд░реАрдХреНрд╖рдг рд╡рд╛рддрд╛рд╡рд░рдг рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд╣реА JSDom рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред
рд╡рд╣ рд╣рд┐рд╕реНрд╕рд╛ рдЬреЛ JSDom рдЕрдиреБрд░рдХреНрд╖рдХреЛрдВ рдХреЗ рд▓рд┐рдП рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛ рд╕рдХрддрд╛ рд╣реИ: рдореИрдВрдиреЗ JSDom рдХреЗ рдЕрдВрджрд░ рд╣рд╛рдЗрдкрд░рдлреЙрд░реНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде-рд╕рд╛рде, рдЙрдкрдпреБрдХреНрдд рд╡реЗрдм рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдХрд╡рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдЦреЗрд▓рд╛:
$ git diff test/web-platform-tests/create-jsdom.js
diff --git a/test/web-platform-tests/create-jsdom.js b/test/web-platform-tests/create-jsdom.js
index 7009df7..9edcb16 100644
--- a/test/web-platform-tests/create-jsdom.js
+++ b/test/web-platform-tests/create-jsdom.js
@@ -1,5 +1,6 @@
"use strict";
const jsdom = require("../..");
+const hyperform = require("hyperform");
const nodeResolverPromise = require("../util").nodeResolverPromise;
const globalPool = { maxSockets: 6 };
@@ -35,6 +36,9 @@ module.exports = (urlPrefix, testPath) => {
return created
.then(window => {
+ global.window = window;
+ global.document = window.document;
+ hyperform(window);
return new Promise((resolve, reject) => {
const errors = [];
рдФрд░ test/web-platform-tests/index.js
рдореЗрдВ "html/semantics/forms/constraints/*.html"
рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рдЕрд╕рдореНрдмрджреНрдзрддрд╛ред
рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдореБрдЭреЗ рд╣рд░реЗ рд░рдВрдЧ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдХреБрдЫ рдкрд░реАрдХреНрд╖рдг рдорд╛рдорд▓реЗ рдорд┐рд▓реЗред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк JSDom рдореЗрдВ рд╣рд╛рдЗрдкрд░рдлреЙрд░реНрдо рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рдореИрдВ рдХреБрдЫ рдФрд░ рдХрд╛рдо рдХрд░реВрдВрдЧрд╛
рдП) рдЙрди рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдФрд░
рдмреА) рд╣рд╛рдЗрдкрд░рдлреЙрд░реНрдо рдХрд╛ рдПрдХ рд╕рдВрд╕реНрдХрд░рдг рдпрд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкреНрд░рджрд╛рди рдХрд░рдирд╛, рдЬрд┐рд╕рдореЗрдВ рдЙрдЪреНрдЪ рд╕реНрддрд░реАрдп рдПрдкреАрдЖрдИ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИ
рдПрдлрдбрдмреНрд▓реНрдпреВрдЖрдИрдбрдмреНрд▓реНрдпреВ, рдореБрдЭреЗ рдЗрд╕рдореЗрдВ рдХрд╛рдлреА рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИ; рдореИрдВ рдПрдХ рд╡реВ рдШрдЯрдХ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬреЛ рдПрдХ JSON рд╕реНрдХреАрдорд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рдлреЙрд░реНрдо рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЬрдорд╛ рдХрд░рдиреЗ рдкрд░ рд╕рддреНрдпрд╛рдкрди рд╕реНрдерд┐рддрд┐ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡реИрдзрддрд╛ API рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рдореЗрд░реЗ рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдг рдЬреЗрд╕реНрдЯ рдХреЗ рд╕рд╛рде рдЪрд▓рд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ (рдЬреЛ рд╣реБрдб рдХреЗ рдиреАрдЪреЗ рдЬреЗрдПрд╕рдбреАрдУрдПрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ), рдФрд░ рдЕрднреА рддрдХ рдореИрдВ рдЗрд╕ рд╣рд┐рд╕реНрд╕реЗ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрде рд╣реВрдВред
@ рдмреЛрд▓реНрдбрд╡рд┐рди рдЕрдЧрд░ рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреЛрдИ рд╕реБрдЭрд╛рд╡ рд╣реИ, рддреЛ рдореИрдВ рдЗрд╕реЗ рд╕рд╣рд░реНрд╖ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реВрдВрдЧрд╛ред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдореЗрдВ рднреА рдХреБрдЫ рдорджрдж рджреЗ рд╕рдХреВрдВ, рдЕрдЧрд░ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдорд╛рд░реНрдЧрджрд░реНрд╢рди рджрд┐рдпрд╛ рдЬрд╛рдП :)
рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдореИрдВрдиреЗ рдиреАрдЪреЗ @EricHenry рдХреЗ рд╕рдорд╛рдзрд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рдФрд░ рдпрд╣ рдХрд╛рдо рдХрд░ рдЧрдпрд╛ред рдореБрдЭреЗ рдмрд╕ checkValidity
рдХреЛ HTMLInputElement
, HTMLSelectElement
, рдФрд░ HTMLTextAreaElement
рдХреЗ рд▓рд┐рдП рднреА рд╕реЗрдЯ рдХрд░рдирд╛ рдерд╛ (рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ HTMLFormElement
рдХреЗ рд╕рд╛рде рдмреЗрд▓рд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рдереА
рдЬреЗрд╕реНрдЯ рдФрд░ рдПрдВрдЬрд╛рдЗрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рд░рд┐рдПрдХреНрдЯ рдШрдЯрдХреЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рддреЗ рд╕рдордп рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рднреА рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рдореИрдВ @fernandopasik рдФрд░ @Boldewyn рджреНрд╡рд╛рд░рд╛ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рд╣рд╛рдЗрдкрд░рдлреЙрд░реНрдо рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ JSDOM рдХреЛ рдкреЙрд▓реАрдлрд┐рд▓ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛ред
рдЕрдкрдиреА рдкрд░реАрдХреНрд╖рдг рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЖрдк рд╣рд╛рдЗрдкрд░рдлреЙрд░реНрдо рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдирд┐рдореНрди рдХрд╛рд░реНрдп рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
import * as hyperform from 'hyperform';
var global = global;
const defineValidity = {
get() {
return hyperform.ValidityState(this);
},
configurable: true
};
global.HTMLFormElement.prototype.checkValidity = function() {
return hyperform.checkValidity(this);
};
Object.defineProperty(global.HTMLFormElement.prototype, 'validity', defineValidity);
Object.defineProperty(global.HTMLInputElement.prototype, 'validity', defineValidity);
Object.defineProperty(global.HTMLSelectElement.prototype, 'validity', defineValidity);
Object.defineProperty(global.HTMLTextAreaElement.prototype, 'validity', defineValidity);
рдЖрдк рдХрд┐рд╕реА рднреА рдЕрдиреНрдп HTMLElements рдХреЗ рд▓рд┐рдП рдЙрд╕реА рд╡рд┐рдзрд┐ рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рдЖрдкрдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ рдпрд╛ рдХреЛрдИ рдЕрдиреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛ рдЬрд┐рд╕реЗ рдЖрдкрдХреЛ рдкреЙрд▓реАрдлрд╝рд┐рд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдкреАрдЖрд░ #2142 рдмрд┐рдирд╛ рдХрд┐рд╕реА рдкреЙрд▓реАрдлрд┐рд▓ рдХреЗ рдкреВрд░реНрдг рдмрд╛рдзрд╛ рдПрдкреАрдЖрдИ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ
рдЬреЗрд╕реНрдЯ рдбреЙрдХреНрд╕ рдореЙрдХрд┐рдВрдЧ рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ JSDOM рдореЗрдВ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рдХрд╛рд░рдг рдЖрдкрдХреЗ рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЛ рдкреНрд░рджреВрд╖рд┐рдд рдХрд░рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдпрд╣ рдПрдХ рдХреНрд▓реАрдирд░ рд╕рдорд╛рдзрд╛рди рд╣реИред
рдореЗрд░реЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореБрдЭреЗ рдПрдХ рдлреЙрд░реНрдо рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдФрд░ рдлрд┐рд░ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╡рд░реНрдЧ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рдлреЙрд░реНрдо рдХреЗ classList
рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА, рдЬрд┐рд╕рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдореБрдЭреЗ рдлреЙрд░реНрдо рдХреА рд╡реИрдзрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реВрдЪрд┐рдд рдХрд░реЗрдЧреАред
рдореЗрд░рд╛ рд╕рдорд╛рдзрд╛рди рдлреЙрд░реНрдо рдХреЗ рдЧреБрдгреЛрдВ рдХрд╛ рдордЬрд╝рд╛рдХ рдЙрдбрд╝рд╛рдирд╛ рдерд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП classList
рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд▓рд┐рдП $ DOMTokenList
рдХреЗ рдореВрд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдордЬрд╝рд╛рдХ рдЙрдбрд╝рд╛рдирд╛
beforeAll(() => {
window.DOMTokenList = jest.fn().mockImplementation(() => {
return {
list: [],
remove: jest.fn().mockImplementation(function (item) {
const idx = this.list.indexOf(item);
if (idx > -1) {
this.list.splice(idx, 1)
}
}),
add: jest.fn().mockImplementation(function (item) {
this.list.push(item);
}),
contains: jest.fn().mockImplementation(function (item) {
return this.list.indexOf(item) > -1;
})
};
});
})
рддрдм рдореИрдВрдиреЗ рдЗрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдЧреБрдг рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ред рдореИрдВ event.currentTarget.form
. рдХреЗ рд╕рд╛рде рд╕рдмрдорд┐рдЯ рдмрдЯрди рд╕реЗ рдЕрдкрдиреЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдШрдЯрдХ рдореЗрдВ рдлреЙрд░реНрдо рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реВрдВ
let mockClassList = new DOMTokenList();
submitBtn.simulate('click', {
currentTarget: {
form: {
checkValidity: () => false,
classList: mockClassList
}
},
preventDefault: jest.fn(),
stopPropagation: jest.fn()
})
рдпрд╣ рдореБрдЭреЗ рдлреЙрд░реНрдо рдХреА рд╡реИрдзрддрд╛ рдХреЛ рдЧрд▓рдд рдФрд░ рд╕рддреНрдп рдкрд░ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдФрд░ рд╣рд░ рдмрд╛рд░ was-validated
рд╡рд░реНрдЧ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП mockClassList
рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рддрд╛ рд╣реИ
submitBtn.simulate('click', {
currentTarget: {
form: {
checkValidity: () => false,
classList: mockClassList
}
},
preventDefault: jest.fn(),
stopPropagation: jest.fn()
});
expect(mockClassList.contains('was-validated')).toBeTruthy();
submitBtn.simulate('click', {
currentTarget: {
form: {
checkValidity: () => true,
classList: mockClassList
}
},
preventDefault: jest.fn(),
stopPropagation: jest.fn()
});
expect(mockClassList.contains('was-validated')).toBeFalsy();
рдПрдлрд╡рд╛рдИрдЖрдИ: рдореИрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдВрдЬрд╛рдЗрдо рдХреЗ рдЙрдерд▓реЗ рдкреНрд░рддрд┐рдкрд╛рджрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдорд╛рдЙрдВрдЯ рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬреЗрдПрд╕рдбреАрдУрдПрдо рдореЗрдВ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдП рдЧрдП рддрд░реАрдХреЛрдВ рдХрд╛ рдордЬрд╛рдХ рдЙрдбрд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреНрдп рд╕реБрдЭрд╛рд╡, рдЬрдм рд╡рд┐рдзрд┐ рдХреЛ рд╕реАрдзреЗ рдкрд░реАрдХреНрд╖рдг рдлрд╝рд╛рдЗрд▓ рд╡рд┐рд╡рд░рдг рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдмрд╕ рдорд╛рдЙрдВрдЯ рдкреНрд░рддрд┐рдкрд╛рджрди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ
рдореБрдЭреЗ input.validity
рдХреА рд╕рдорд╕реНрдпрд╛ рд╣реИ рдЬреЛ рдореЗрд░реЗ рд▓рд┐рдП j [email protected] рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИред
// EditableInput.js:
this.inputElement = React.createRef();
...
const input = this.inputElement.current;
console.error('input.validity: ', input.validity);
// EditableInput.test.js run outcome:
console.error src/components/Form/Input/EditableInput.js:47
input.validity: undefined
// yarn.lock:
jsdom@^11.5.1:
version "11.12.0"
resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-11.12.0.tgz#1a80d40ddd378a1de59656e9e6dc5a3ba8657bc8"
integrity sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw==
рдореИрдВ рджреЗрдЦрддрд╛ рд╣реВрдВ рдХрд┐ рдЬрд┐рд╕ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдпрд╣ рддрдп рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛ рд╡рд╣ 11.8.0 рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕реЗ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдЬрд┐рд╕ рджрд┐рди рдкреАрдЖрд░ рд╡реИрдзрддрд╛ рдкреВрд░реНрдгрд╛рдВрдХ рдХреЗ рд╕рд╛рде рд╡рд┐рд▓рдп рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдХреНрдпрд╛ рдореИрдВ рдХреБрдЫ рднреВрд▓ рд░рд╣рд╛ рд╣реВрдБ?
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
: +1: рдпрд╣ рдПрдХ рдмрдбрд╝реА рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реЛрдЧреАред