1

html片段:

<table id="project_1">
  <thead>
    ...
    <tr>
      <form accept-charset="UTF-8" action="/projects/1/tasks" class="add-task form-search" 
        data-remote="true" id="new_task" method="post"></form>
      <th><input class="input-xlarge" id="task_content" name="task[content]" 
        placeholder="Start typing here to create a task..." size="50" type="text"></th>
      <th><input class="btn" name="commit" type="submit" value="Add Task"></th>
    </tr>
  </thead>
  ...
</table>

水豚的 rspec 测试:

it "should create a task", :js => true do
  visit projects_path
  within("#project_#{@project.id}") do
    fill_in "task[content]", :with => "This is a new task"
    save_and_open_page
    click_button 'Add Task'
  end
  page.should have_content("This is a new task")
end

Capybara 成功找到页面上的所有元素,但在页面中(由 save_an_open_page 生成)字段“任务 [内容]”为空。

这里可能有什么问题?谢谢

更新:

从这个erb生成的html代码:

...
<%= form_for [project, Task.new], html: { :class => "add-task form-search" }, remote:   true do |f| %>
  <th><%= f.text_field :content, :class => "input-xlarge", :placeholder => "Start typing here to create a task...", :size => 50 %></th>
  <th><%= f.submit "Add Task", :class => "btn" %></th>
<% end %>
...
4

3 回答 3

1

更新:

封闭标签(@Steve 注意到)可能确实是您的问题。这是有同样问题的人:form_for closes <form> 标签

我怀疑问题可能出在表单中的 HTML 标记上。如果您删除表格行/标题标签怎么办,如下所示:

<%= form_for [project, Task.new], html: { :class => "add-task form-search" }, remote:   true do |f| %>
  <%= f.text_field :content, :class => "input-xlarge", :placeholder => "Start typing here to create a task...", :size => 50 %>
  <%= f.submit "Add Task", :class => "btn" %>
<% end %>

首先查看是否生成正确的 HTML(使用<form>包装标签的<input>标签,然后查看是否使规范通过。

原始答案:

我怀疑问题不在于 ,而在于fill_in它之后发生的事情(添加任务)。在我自己的测试中,我发现save_and_open_page即使测试确实有效,也不会在实际字段中显示文本。你确定表单提交后在页面中添加新任务没有问题吗?

其他要尝试的事情:

  1. 删除within块,看看它是否有效。
  2. 尝试使用该字段id而不是它的namein fill_in,即:fill_in "task_content", :with => "This is a new task"'看看是否有效。
于 2012-08-09T22:22:25.860 回答
1

我看不出测试代码和 Capybara 调用有什么问题。

在您的标记中,虽然看起来您的两个input元素都超出了form我希望包含它们的范围。应该是?:

<form accept-charset="UTF-8" action="/projects/1/tasks" class="add-task form-search" 
    data-remote="true" id="new_task" method="post">
  <th><input class="input-xlarge" id="task_content" name="task[content]" 
    placeholder="Start typing here to create a task..." size="50" type="text"></th>
  <th><input class="btn" name="commit" type="submit" value="Add Task"></th>
</form>

(我不确定form在 a 中嵌套元素tr是否是严格合法的 HTML,所以也许您需要考虑使用表格的替代方案)。

我通常发现save_and_open_page默认 Rack 驱动程序非常可靠,但您在这里运行 JavaScript,所以我猜您正在运行 selenium 或 headless-webkit 驱动程序。

于 2012-08-09T23:28:54.550 回答
0

关于水豚的一些有趣的事情https://github.com/thoughtbot/capybara-webkit/issues/253

于 2016-02-19T06:04:22.367 回答