背景: 我正在使用 Cucumber/Capybara/PhantomJS/Poltergeist 测试一个 Rails 应用程序。我的黄瓜步骤定义文件之一中有一个 click_link 调用。然后这个 click_link 调用会导致 Rails 调用控制器的 show 方法。控制器通过特定 id 查找对象并以 javascript 格式 (format.js) 响应。show.js.erb 文件给出的响应然后在 Twitter Bootstrap 模式对话框上执行一些文本字符串替换,以在框中显示自定义状态消息。然后显示模态对话框。
这一切都在生产中起作用。但它似乎在测试中不起作用。我收到一条错误消息“找不到带有值或 id 或文本‘关闭’的按钮 (Capybara::ElementNotFound)”。此外, puts page.html 仅显示以下内容:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
这让我觉得模态对话框根本没有显示出来。有人对发生了什么有任何想法吗?
cucumber_steps.rb
When /^I click this link$/ do
click_link "Some link to call show method"
puts page.html
end
And /^I click close button in the modal box$/ do
click_button 'Close'
end
Twitter Bootstrap 模式框页面中的 HTML:
<ul>
<li><a href="/kites/24" data-remote="true">Some link to call show method</a></li>
</ul>
:
:
<form>
<div id="myModal" class="modal hide fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h3 id="myModalLabel">Modal header</h3>
</div>
<div class="modal-body">
<p>One fine body…</p>
</div>
<div class="modal-footer">
<button class="btn" data-dismiss="modal" aria-hidden="true">Close</button>
<button class="btn btn-primary">Save changes</button>
</div>
</div>
</form>
Rails 显示方法
def show
@kite = Kite.find(params[:id])
respond_to do |format|
format.js
end
end