そのため、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 を実際には更新しないようです。何が間違っているのですか?