2012-10-29 25 views
1

我正在测试以确保创建的用户被分配给我的实例变量@user。我明白什么可以获得意义,但我不确定要为测试写什么。我返回一个错误的URI或URL的参数错误。我的测试出了什么问题,我该如何解决?用户创建Rspec测试实例变量

it "checks @user variable assignment for creation" do 

    p = FactoryGirl.create(:user) 
    get :users 
    # I'm confused on what this line above means/does. What does the hash :users refer 
    #to 
    assigns[:user].should == [p] 

end 

expected URI object or string errorget :users并如下错误

Failure/Error get :users 
ArgumentError: 
    bad argument: (expected URI object or URI string) 

回答

1

我猜你想要的是

it "checks @user variable assignment for creation" do 
    p = FactoryGirl.create(:user) 
    get :show, id: p.id 
    assigns(:user).should == p 
end 

你不知道会检查的内容的行在用户p的显示视图中分配的变量(@user)等于您刚刚创建的p用户more information there

+0

它仍然给我一个URI错误。为了澄清一下,我想检查一下我在'users/new'中创建的用户是否将它的表单信息转移到'users/creation'控制器中的变量'@ user'中。 – jason328

+0

你在说什么确切的URI错误? – pjam

+0

那么,在我的例子中,错误是指'get:index'。 – jason328

0

你想要测试什么动作?通常情况下,创造,你需要测试控制器的“创建”操作将创建一个用户,并分配一个@user变量

我将测试这种方式:

describe 'POST create' do 
    it 'creates a user' do 
    params = {:user => {:name => 'xxx', :lastname => 'yyy'}} 
    User.should_receive(:create).with(params) 
    post :create 
    end 

    it 'assigns the user to an @user instance variable' do 
    user = mock(:user) 
    User.stub!(:create => user) 
    post :create 
    assigns(:user).should == user 
    end 
end 

通知我存根/模拟所有用户方法,因为您正在测试控制器,所以您不必真正创建用户,您只测试控制器调用所需的方法,用户创建在用户模型规范内进行测试,我也做了2测试(如果可能的话,你应该在每个块上只测试1件事情,首先测试控制器创建用户,然后测试c ontroller分配变量

我假设你的控制器是这样的:

controller... 
    def create 
    @user = User.create(params[:user]) 
    end 

这是太简单了,我想你有更多的代码,你应该测试代码太(验证,重定向,闪光消息等)