export default { async test({ assert, component, target, window }) { const [input1, input2] = target.querySelectorAll('input'); // we are not able emulate user interaction in jsdom, // therefore, jsdom could not validate minlength / maxlength // we simulate user input with // setting input.value + dispathEvent // and we determine if svelte does not set the `input.value` again by // spying on the setter of `input.value` const spy1 = spyOnValueSetter(input1, input1.value); const spy2 = spyOnValueSetter(input2, input2.value); const event = new window.Event('input'); input1.value = '12345'; spy1.reset(); await input1.dispatchEvent(event); assert.ok(!spy1.isSetCalled()); input2.value = '12345'; spy2.reset(); await input2.dispatchEvent(event); assert.ok(!spy2.isSetCalled()); spy1.reset(); component.val1 = '56789'; assert.ok(spy1.isSetCalled()); spy2.reset(); component.val2 = '56789'; assert.ok(spy2.isSetCalled()); } }; function spyOnValueSetter(input, initialValue) { let value = initialValue; let isSet = false; Object.defineProperty(input, 'value', { get() { return value; }, set(_value) { value = _value; isSet = true; } }); return { isSetCalled() { return isSet; }, reset() { isSet = false; } }; }