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によって生成された)のフィールド'task[content]'は空です。

ここで何が問題になる可能性がありますか?ありがとう

アップデート:

この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 は <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. そのinのid代わりにフィールドの、つまり:を使用してみて、それが機能するかどうかを確認してください。namefill_infill_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 に答える