Ruby on rails 在Rspec isn'中更新;t正在工作,尽管状态为200

Ruby on rails 在Rspec isn'中更新;t正在工作,尽管状态为200,ruby-on-rails,ruby,rspec,ruby-on-rails-5,Ruby On Rails,Ruby,Rspec,Ruby On Rails 5,我正在尝试更新Rspec中的用户: require "rails_helper" RSpec.describe UsersController, type: :controller do describe "PUT #update" do it 'should update a user' do attr1 = { .............. } u1 = User.create!(attr1) put :update, { id:

我正在尝试更新Rspec中的用户:

require "rails_helper"

RSpec.describe UsersController, type: :controller do
  describe "PUT #update" do
    it 'should update a user' do
        attr1 = { .............. }
        u1 = User.create!(attr1)
        put :update, { id: u1.to_param, user: attr1.merge({name: "name2", email: "email2@mail.com"}) }, format: :json
        u1.reload

        expect(response.status).to eq(200)
        expect(u1.name).to eq("name2")

状态为200,但在正文中返回的属性没有更新。

我不知道attr上的属性是什么,但请尝试以下操作:

describe "PUT #update" do
      let(:option) { assigns(:option) }

      before(:each) do
        attr1 = { .............. }
        u1 = create(:user, attr1....)
        put :update, params: {
          user: attributes_for(:user, name: "name2", email: "email2@mail.com"),
          id: u1.id
        }
      end

      it "should be success" do
        expect(response.status).to eq(200)
      end

      it "should update attributes" do
        expect(u1.name).to "name2"
      end
    end

你的日志怎么说<控制器返回200的code>log/test.log不会告诉您任何信息。您可以有一个控制器,它完全不执行任何操作,但仍然返回200。请包括测试中的实际代码。当然是您的控制器。@max与此处相同,但需要更新当要求补充信息时,请将其添加到问题本身。不要指望人们愿意帮助你四处挖掘,也不要让我们猜测。。。