• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

如何通过rspec和rails 3控制器规范中的复选框集合值3

ruby-on-rails-3 来源:gowillingham 5次浏览

使用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 
    ] 
} 

如果你想用自己的答案解决问题,我认为你可以创建一个答案然后接受它。


版权声明:本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。
喜欢 (0)