2012-10-29 27 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 

這是太簡單了,我想你有更多的代碼,你應該測試代碼太(驗證,重定向,閃光消息等)