javascript - Rails 4 -assert_select 不适用于由 javascript 更新的元素

标签 javascript ruby-on-rails ruby-on-rails-4 integration-testing

我有一个默认为空白的 span 元素,并在通过 javascript 加载页面时更新。这很有效 - 然而,assert_select 似乎只能在页面加载完成之前获取初始 HTML。这是预期的行为吗?我做错了什么?

脚手架中的span元素生成_form.html.erb:

...
<span id="confirm_loaded"></span>
...

---- 在 app/assets/javascripts 的 .js 文件中:

$(function(){
  $("#confirm_loaded").html("test");
});

---- 当我加载页面时 -- 页面通过 JavaScript 更新,一切正常。

但是,在集成测试中 - 此行:

assert_select "span#confirm_loaded", {text: "test"}

失败并出现错误:

<test> expected but was
<>..
Expected 0 to be >= 1.

这似乎确认测试没有看到由 javascript 设置的更新的 HTML 元素(也许它在页面完全加载之前运行?)

快速更改页面,删除 JavaScript 并对 HTML 进行硬编码:

...
<span id="confirm_loaded">test</span>
...

现在测试通过了(assert_select 能够获取值,我们就成功了)。

assert_select只能获取HTML标签的初始值吗?为什么在页面加载时,assert_select没有获取由 javascript 更新的值?

感谢您的帮助。

最佳答案

是的,你在问题中说得对。 assert_select 选择元素并对 @response(@response.body) 对象进行相等性测试。这是从服务器返回的实际响应,因此当时没有执行任何 JavaScript 代码,因此您会得到带有空文本的跨度。当脚本在浏览器中运行时。

关于javascript - Rails 4 -assert_select 不适用于由 javascript 更新的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19311152/

相关文章:

javascript - 网络音频分析器的 getFloatTimeDomainData 缓冲区偏移量在其他时间的缓冲区和 'complete file' 的缓冲区

javascript - 使用 nodejs 和 knox 保存来自 s3 的传入文件?

ruby-on-rails - Rails - 获取当前请求的 'URI Pattern'

ruby-on-rails - Controller 测试和 stub 过滤器/操作。指导方针是什么?

javascript - JS for 循环到胖箭头函数的前缀操作中左侧表达式无效

javascript - Angular 选择延迟加载项目的默认值

ruby-on-rails - has_many 关联不尊重自定义变形器

ruby-on-rails - Rails 5 - 如何在公寓 gem 中的多个租户之间共享数据?

ruby-on-rails - Devise 的匿名用户?

ruby-on-rails - ActiveRecord::Associations::集合到数组