с рельсами 3 и rspec. У меня есть форма в виде, как это ..
<%= form_for current_account, { :url => admins_account_path(current_account), :method => 'put' } do %>
<div class="action">
<%= submit_tag "Save" %>
</div>
<table>
<tbody>
<% @accountships.each do |accountship| %>
<tr>
<td><%= check_box_tag "accountship_ids[]", accountship.id, accountship.admin? %></td>
<td><%= accountship.user.name %>
</tr>
<% end %>
</tbody>
</table>
<% end %>
А в контроллере я обрабатываю PUT этим методом в account # update_admin. Это все работает, как ожидалось.
@account.assign_administrators params[:accountship_ids]
Мой вопрос заключается в том, как мне построить параметры в rspec для проверки этого действия контроллера. То, что я пробовал до сих пор, не работает. Вот моя последняя попытка, которая не работает.
before(:each) do
# code that generates the ids, I know this is working from other tests ..
.
.
.
@attr = {
:accountship_ids => [
@admin_accountship.id,
@not_admin_accountship.id,
@signed_in_user_accountship.id
]
}
end
it "should assign admin to users in the list" do
# what should I be passing in as @attr?
put :update_admins, :id => @account, :accountship_ids => @attr
Accountship.find(@admin_accountship.id).admin.should be_true
Accountship.find(@owner_accountship.id).admin.should be_true
Accountship.find(@not_admin_accountship.id).admin.should_not be_true
end
Все тесты, которые я смог написать, для которых требуются значения из коллекции флажков формы, не выполняются, и очевидно, что атрибут what_accountship.admin не обновляется, когда тест rspec публикует данные.
Заранее спасибо!
EDIT
Я наткнулся на решение. Массив не должен был быть заключен в хеш, а значения в литерале массива необходимо сначала преобразовать в строки, как показано ниже.
@attr = [
@admin_accountship.id.to_s,
@not_admin_accountship.id.to_s,
@signed_in_user_accountship.id.to_s
]
Кто-нибудь понимает, почему они должны быть строками, когда другие мои тесты могут принять полноценный объект (строки не требуются)?
Кроме того, что мне теперь делать с моим вопросом, когда я знаю ответ?