【发布时间】:2018-05-31 08:19:08
【问题描述】:
我的应用程序有很多不同的地方,当用户单击按钮/链接/div 时,我通过调用 ajax 函数来更新数据库。我需要在我的测试中包含这些功能,但我对 Capybara 的了解还不够。
下面是我想要测试的一个 div、关联的 ajax 调用以及我想要通过的测试的示例。我应该补充一点,我正在通过 Cloud9 IDE 构建,以防万一。
查看
<% @seminar.students.order(:last_name).in_groups_of(6).each do |group| %>
<div class="row">
<% group.each do |student| %>
<% if student %>
<% this_ss = @seminar.seminar_students.find_by(:user => student) %>
<% if this_ss.present %>
<% thisClass = "col-md-2 seat clickySeat" %>
<% thisText = "Present" %>
<% else %>
<% thisClass = "col-md-2 seat clickySeat absent" %>
<% thisText = "Absent" %>
<% end %>
<div class = "<%= thisClass %>" id="<%= this_ss.id %>" name="ss_<%= this_ss.id %>">
<%= student.first_plus_init %><br/>
<p class="presentTag"><%= thisText %></p>
</div>
<% end %>
<% end %>
</div>
<% end %>
咖啡脚本
if $('.clickySeat').length > 0
$('.clickySeat').on "click", ->
this_tag = $(this).find(".presentTag")
seminar_student_id = $(this).attr('id')
url = '/seminar_students/'+seminar_student_id
if this_tag.text() == "Absent"
attendance = true
$(this).removeClass("absent")
this_tab.text("Present")
else
attendance = false
$(this).addClass("absent")
this_tab.text("Absent")
$.ajax
type: "PUT",
url: url,
dataType: "json"
data:
seminar_student:
present: attendance
测试
test "attendance with click" do
@ss = @student_3.seminar_students.find_by(:seminar => @seminar)
assert @ss.present
capybara_login(@teacher_1)
click_on("desk_consult_#{@seminar.id}")
click_on("#{new_consultancy_button_text}")
find("##{@ss.id}").click
assert_not @ss.present
click_on("Create Desk Consultants Groups")
end
在开发和生产中,div 和 ajax 正在努力切换学生在数据库中被标记为缺席/在场。但在测试中,行 assert_not @ss.present 失败。这是我试图在所有地方修复的模式:我的水豚测试都没有调用任何 javascript。
我已经阅读了一些类似的问题和相关文章。我已经尝试了到目前为止我读过的所有建议,例如添加 selenium-webkit gem,以便我可以使用 Capybara.javascript-driver = :selenium 行。到目前为止,我遇到的任何解决方案都没有为我工作。
提前感谢您提供任何见解。
【问题讨论】:
-
你没有告诉我们你想通过的测试到底是什么失败了。此外,当您设置
Capybara.javascript_driver时,它仅用于您指定使用支持 javascript 的驱动程序的测试。见-github.com/teamcapybara/capybara#selecting-the-driver。您应该能够判断它是否使用 selenium,因为它通常会打开 Firefox 或 Chrome 的实例(取决于您的配置)。 -
啊哈。好点子。测试在 assert_not @ss.present 行上失败。在开发和生产中,单击 div 会更新数据库以在学生在缺席和在场之间切换。在测试中,没有任何反应。
-
这是我试图到处修复的模式:我的水豚测试都没有调用任何 javascript。
标签: ruby-on-rails ajax coffeescript capybara