Rails 4 - assert_select不使用javascript更新的元素

Gab*_*iel 0 javascript integration-testing ruby-on-rails ruby-on-rails-4

我有一个默认为空白的span元素,并在页面由javascript加载时更新.这很好用 - 但是assert_select似乎只能获得初始HTML - 在页面加载完成之前.这是预期的行为吗?我究竟做错了什么?

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

...
<span id="confirm_loaded"></span>
...
Run Code Online (Sandbox Code Playgroud)

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

$(function(){
  $("#confirm_loaded").html("test");
});
Run Code Online (Sandbox Code Playgroud)

----当我加载页面时 - 页面通过javascript更新,一切都很好.

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

assert_select "span#confirm_loaded", {text: "test"}
Run Code Online (Sandbox Code Playgroud)

失败并出现错误:

<test> expected but was
<>..
Expected 0 to be >= 1.
Run Code Online (Sandbox Code Playgroud)

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

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

...
<span id="confirm_loaded">test</span>
...
Run Code Online (Sandbox Code Playgroud)

现在测试通过(assert_select能够获得值,我们是金色的).

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

谢谢你的帮助.

Mal*_*zad 6

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