ember.js - 在集成测试中,在 ` 内的输入上使用测试帮助程序 `triggerKeyEvent`
问题描述
这个问题基于演示回购https://github.com/bartocc/so-enter-key-integration-test
这个演示 Ember.js 3.12 应用程序包含该<XFoo>
组件。渲染时,它会显示一个<form>
带有文本输入和提交按钮的简单元素。
<form>
有一个绑定在其事件上的操作,该操作会将submit
组件的submitted
属性设置为true
。默认情况下,它是false
.
所需的行为是在提交后显示感谢消息而不是显示<form>
。
这是组件的模板:
{{#if this.submitted}}
<span>
Thank you for your submission
</span>
{{else}}
<form {{action (mut this.submitted) true on="submit"}}>
{{! template-lint-disable self-closing-void-elements }}
<input type="text" />
<button type="submit">
Save
</button>
</form>
{{/if}}
我添加了 2 个集成测试<XFoo>
:
- 尝试使用代码将
Enter
keydown 事件发送到<input>
标签
await render(hbs`<XFoo />`);
await triggerKeyEvent('input', 'keydown', 'Enter');
- 另一个点击提交按钮
await render(hbs`<XFoo />`);
await click('button');
两个测试都检查感谢信息的存在:
assert.dom('span').hasText('Thank you for your submission', 'displays the thank you span');
第一次测试失败,第二次通过。
我想了解为什么 usingtriggerKeyEvent
不提交表单。
解决方案
我能够通过使用本机事件调度程序来触发它:
const submitForm = async (element) => {
const submitEvent = new Event('submit');
element.querySelector('form').dispatchEvent(submitEvent);
await settled();
};
我在填写输入内容后调用它
await fillIn(selector, '<content>');
await submitForm(this.element);
推荐阅读
- android - Google Play 限制短信和通话记录权限的使用
- c - 传递的参数多于 C 中原型中指定的参数
- python - 为什么 List 在相同的 python 代码上比 Dict 快?
- javascript - 如何解决 grunt 浏览器的持续重新加载?
- python - 将使用 django-modeltranslation 翻译的字段复制到另一个模型实例
- java - maven surefire 插件 - 按顺序运行所有测试
- android - 在android中的单个视图中显示一组值
- java - 更改主题并重新创建活动时,PreferenceFragmentCompat 不会更改颜色
- ruby-on-rails - 未初始化的常量 Google::Cloud::Vision::ImageAnnotator
- python - 熊猫改变列的顺序