如何为控制器编写rspec以进行更新操作?

时间:2014-01-06 05:31:01

标签: rspec ruby-on-rails-4 factory-bot rspec-rails

我是Rails的新手,并开始研究一个新项目。但我无法找到我的更新控制器的确切解决方案这是我的更新控制器。

 def update
    respond_to do |format|
      if @wallet.update(wallet_params)
        format.html { redirect_to @wallet, notice: 'Wallet was successfully updated.' }
        format.json { head :no_content }
      else
        format.html { render action: 'edit' }
        format.json { render json: @wallet.errors, status: :unprocessable_entity }
      end
    end
  end

在我的钱包表中,我有id,user_id,balance,name。我试过了

   describe "PUT #update" do
     it "should update the wallet" do
        put :update, id :@wallet.id :wallet{ :name => "xyz", :balance => "20.2"}
     end
   end

甚至尝试过很少的东西 RSpec test PUT update actionHow to write an RSpec test for a simple PUT update?但仍然无法解决问题。

1 个答案:

答案 0 :(得分:2)

如果您正在使用Rails 4,请使用PATCH而不是PUT; PUT仍然有效,但现在首选PATCH。要测试一下,试试这个:

describe "PATCH #update" do
  context "with good data" do
    it "updates the wallet and redirects" do
      patch :update, id: @wallet.id, wallet: { name: "xyz", balance: "20.2"}
      expect(response).to be_redirect
    end
  end
  context "with bad data" do
    it "does not change the wallet, and re-renders the form" do
      patch :update, id: @wallet.id, wallet: { name: "xyz", balance: "two"}
      expect(response).not_to be_redirect
    end
  end
end

您可以使期望条款更具体,但这是一个开始。如果要测试代码的json部分,只需将format: 'json'添加到params散列中。