1

作成したユーザーがインスタンス変数に割り当てられていることを確認するためにテストしています@user。get の意味は理解できますが、テスト用に何を書けばよいかわかりません。URI または URL が正しくないため、引数エラーが返されます。テストのどこが問題で、どうすれば修正できますか?

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 error参照先get :usersとエラーは次のとおりです

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

2 に答える 2

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 ユーザーと等しいことを 確認します。

于 2012-10-29T21:02:50.057 に答える
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

すべてのユーザーメソッドをスタブ/モックすることに注意してください。コントローラーをテストしているため、実際にユーザーを作成する必要はありません。コントローラーが目的のメソッドを呼び出すことのみをテストし、ユーザーの作成は User モデル仕様内でテストされます。

また、私は2つのテストを行いました(可能であれば、ブロックごとに1つだけをテストする必要があります。最初にコントローラーがユーザーを作成することをテストし、次にコントローラーが変数を割り当てることをテストします

あなたのコントローラーは次のようなものだと思います:

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

これはあまりにも単純です。もっと多くのコードがあると思います。そのコードもテストする必要があります (検証、リダイレクト、フラッシュ メッセージなど)。

于 2012-10-30T12:58:12.847 に答える