未定义的局部变量或方法`params` Rspec

时间:2013-04-19 16:36:14

标签: ruby-on-rails ruby-on-rails-3 rspec

我有以下控制器RSpec测试应该可以工作,但是当我尝试执行以下代码时:

require 'spec_helper'
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')


describe UsersController do
  include Devise::TestHelpers #Include devise test helpers
  render_views # Render devise views

  describe "GET 'show'"

  before(:each) do
    @user = User.find(params[:id])
    @attr = {:initials => 'EU', :name => 'Example', :full_name => 'Example User',
             :email => 'user@example.com', :password => 'password', :password_confirmation => 'password'

             #@attr = User.all
    }
  end

  it 'should be successful when showing OWN details' do
    get :show, :id => @attr
    response.should be_success
  end

  it 'should find the correct user' do
    get :show, :id => @attr
    assigns(@attr).should == @attr
  end
end

但是我得到以下输出:Undefined locacl variable or method 'params' for RSPRC我相信这个设置应该是正确的。

1 个答案:

答案 0 :(得分:2)

我看到这里发生了一些事情。

你在before语句中调用params但是id设置在哪里?我在这段代码中没有看到实际确定/找到用户ID的位置。您应该使用您知道存在的ID或执行诸如User.first之类的内容来显式设置@user。

然后而不是调用

get :show, :id => @attr 

你应该打电话

get :show, :id => @user.id

此外,我不确定为什么需要两次包含spec_helper。第2行应该可以删除。

还有一件事 - 分配(@attr).should == @attr没有任何意义。它应该是分配(:attr).should == @attr。否则,您将把@attr的值传递给assigngs方法。