我有以下控制器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
我相信这个设置应该是正确的。
答案 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方法。