0

我有一个 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 更新的值?

谢谢你的帮助。

4

2 回答 2

6

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

于 2014-05-19T12:18:42.400 回答
1

仔细考虑一下,可能只是命令行测试从服务器获取响应并将其提供给解析/验证的情况。

这将有两个重要方面:

  1. 不会执行脚本和客户端代码
  2. 进入场景 - 提供浏览器界面的测试框架等 - 以便呈现客户端代码

似乎情况就是这样 - 但是 - 我会留下这个问题,以防我遗漏了什么。

于 2013-10-11T11:43:16.107 回答