如何通过rspec和rails 3控制器规范中的复选框集合值3
使用rails 3和rspec。我有一个形式,这样的观点..如何通过rspec和rails 3控制器规范中的复选框集合值3
<%= 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 %>
和Controller,我处理与应收#update_admin这种方法PUT。这一切都按预期工作。
@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
所有的测试,我已经能够编写需要从形式复选框收集是失败的值,这是显而易见的是,当RSpec的测试发布的数据whatever_accountship.admin属性不被更新。
在此先感谢!
EDIT
我偶然到该溶液中。数组不应该包含在散列中,并且数组文本中的值需要首先转换为字符串,如下所示。
@attr = [ @admin_accountship.id.to_s,
@not_admin_accountship.id.to_s,
@signed_in_user_accountship.id.to_s
]
任何人都明白,为什么他们需要字符串时,其他测试中,我已经可以接受(无需字符串)一个成熟的对象?
另外,我现在对我的问题做了什么,我知道答案?
回答:
它看起来像你分配的params散列实例变量,然后作出的第一个哈希值作为值并传递整个混乱在put
声明,当你所需要做的是通过原始参数。或者换句话说:
put :update_admins, :id => @account.id, @attr
编辑
对不起,漫长的一天。 】这个params需要进入一个哈希后的动作,所以:
put :update_admins, {:id=>@account.id}.merge(@attr)
EDIT 2
如果您在数组中传递字符串的哈希语法将工作:
@attr = { :accountship_ids => [
@admin_accountship.id.to_s,
@not_admin_accountship.id.to_s,
@signed_in_user_accountship.id.to_s
]
}
如果你想用自己的答案解决问题,我认为你可以创建一个答案然后接受它。
以上是 如何通过rspec和rails 3控制器规范中的复选框集合值3 的全部内容, 来源链接: utcz.com/qa/262059.html