-1

そのため、RSPEC でコントローラーの 1 つをテストしており、更新プログラム全体をテストしようとしています。これは私がRSPECに持っているものです

 describe 'PUT update' do
         before :each do
           @user = Factory(:user,name: "Lawrence Smith")
         end

      context "valid attributes" do
        it "located the requested @user" do
          put :update, :id => @user, user: Factory.attributes_for(:user)
          assigns(:user).should eq(@user)      
        end

        it "changes @user's attributes" do
          put :update, :id=> @user.id, user: Factory.attributes_for(:user, name: "Larry Smith")
          @user.reload
          @user.name.should eq("Larry Smith")

        end

      end

そして、これは私がコントローラーに持っているものです

def update
#update and save
@user = User.find(params[:id])
respond_to do |format|
if @user.update_attributes(params[:user])
  sign_in @user
  format.json{render :json => @user ,:status => :created, :location => @user }
else
  format.json { render :json => @user.errors, :status => :unprocessable_entity }
end
end

私のエラーが名前がまったく変更されていないことを示したので、 @user.reload は ActiveRecord を実際には更新しないようです。何が間違っているのですか?

4

1 に答える 1

0

get または post パラメーターでオブジェクトを渡す方法がわかりません。とにかく、このように 'PUT update' do before :each do @user = Factory(:user,name: "Lawrence Smith") end を記述してみてください

  context "valid attributes" do
    it "located the requested @user" do
      put :update, :id => @user, user: Factory.attributes_for(:user)
      assigns(:user).should eq(@user)      
    end

    it "changes @user's attributes" do
      put :update, :id=> @user.id, :user_name => Factory.attributes_for(:user, name: "Larry Smith").name
      @user.reload
      @user.name.should eq("Larry Smith")

    end

  end

そしてこれはコントローラーで

def update
#update and save
@user = User.find(params[:id])
respond_to do |format|
if @user.update_attributes(:name => params[:user_name])
  sign_in @user
  format.json{render :json => @user ,:status => :created, :location => @user }
else
  format.json { render :json => @user.errors, :status => :unprocessable_entity }
end
end

ここで説明したことを理解していると思います。

ありがとう

于 2012-10-10T18:27:20.807 に答える