1

导轨 4,rspec 3

我正在使用分页和伪造者

下面是一个旧的测试用例,在我实现分页和伪造之前很好。

RSpec.describe "users/index", :type => :view do
  before(:each) do
    assign(:users, [
      User.create!(
        :name => "Name",
        :email => "Name@mail.com",
        :password => "mystrings"
      ),
      User.create!(
        :name => "Name",
        :email => "Name2@mail.com",
        :password => "mystrings"
      )
    ])
  end

  it "renders a list of users" do
    render
    assert_select "tr>td", :text => "Name".to_s, :count => 2
    assert_select "tr>td", :text => "Name@mail.com".to_s, :count => 1
    assert_select "tr>td", :text => "Name2@mail.com".to_s, :count => 1
  end
end

错误信息:

 1) users/index renders a list of users
     Failure/Error: render
     ActionView::Template::Error:
       undefined method `total_pages' for #<Array:0x007f90b55d7828>
     # /Users/xuanliu/.rvm/gems/ruby-2.1.3/gems/will_paginate-3.0.7/lib/will_paginate/view_helpers.rb:73:in `will_paginate'

除了使用render“刷新”当前页面,还有什么方法可以让我在视图上进行测试?

我认为我的另一个问题是类似的 - 也是关于render正确使用。

测试用例:

RSpec.describe "users/show", :type => :view do
  before(:each) do
    @user = assign(:user, User.create!(
      :name => "Name5",
      :email => "Name5@mail.com",
      :password => "mystrings"
    ))
  end

  it "renders attributes in <p>" do
    render
    expect(rendered).to match(/Name/)
    expect(rendered).to match(/Email/)
  end
end

错误信息:

2) users/show renders attributes in <p>
     Failure/Error: render
     ActionView::Template::Error:
       The @test variable appears to be empty. Did you forget to pass the collection object for will_paginate?
     # /Users/xuanliu/.rvm/gems/ruby-2.1.3/gems/will_paginate-3.0.7/lib/will_paginate/view_helpers/action_view.rb:94:in `infer_collection_from_controller'

感谢您的时间。

4

2 回答 2

0

错误 1

您收到此错误的原因是:

assign(:users, [
   User.create!(
     :name => "Name",
     :email => "Name@mail.com",
     :password => "mystrings"
   ),
   User.create!(
     :name => "Name",
     :email => "Name2@mail.com",
     :password => "mystrings"
   )
 ])

最有可能在您的代码中,您通常@users使用 sth like分配User.all- 这会返回ActiveRecord::Relation对象,这不是Array您分配的对象。您应该能够通过以下方式解决此问题:

User.create!(
   :name => "Name",
   :email => "Name@mail.com",
   :password => "mystrings"
 )
 User.create!(
   :name => "Name",
   :email => "Name2@mail.com",
   :password => "mystrings"
 )
assign(:users, User.all)

错误 2

显然你使用@test变量,你没有分配任何东西。@test如果不知道为什么在您的视图中调用了一个变量,就不可能说更多。

于 2014-10-03T21:38:50.740 回答
0

试试这个代码:

before(:each) do
  @user = assign(:user, User.create!(
    :name => "Name5",
    :email => "Name5@mail.com",
    :password => "mystrings"
  ))
  assign :user, user
  assign :test, user
end
于 2015-12-29T04:07:29.783 回答