PUT请求似乎始终路由到Rails

时间:2013-05-17 15:24:00

标签: ruby-on-rails rspec ruby-on-rails-3.2 rspec-rails put

我正在尝试通过rspec运行一些测试,并且我一直收到错误,因为流量没有被重新路由。它特别发生在PUT和DELETE请求上。我没有收到路由错误,错误是:

Expected response to be a redirect to http://www.example.com/ but was a redirect to https://www.example.com/users/212

我的UsersController看起来有点像这样:

class UsersController < ApplicationController
  before_filter :signed_in_user, only: [:edit, :update, :index, :destroy]

  .
  .
  .

  def update
    puts "Update called."

    if @user.update_attributes(params[:user])
      flash[:success] = "Profile updated"
      sign_in @user
      redirect_to @user
    else
      render 'edit'
    end
  end

然而在运行rspec时从不打印“Update called”,但show show中的“Show called”put总是如此。 signed_in方法如下所示:

def signed_in_user
  puts "Signed in?: #{signed_in?}"

  if !signed_in?

    store_location
    flash[ :notice ] = "You must sign in to access this page."
    redirect_to signin_url
  end
end

“已登录”也从未打印过。

以下是导致其中一个错误的测试:

describe "for non-signed-in users" do
  let(:user) { FactoryGirl.create(:user) }

  describe "in the Users controller" do
    describe "submitting to the update action" do
      before { put user_path(user) }
      specify { response.should redirect_to(signin_path) }
    end
  end
end

我最好的猜测是测试不遵守之前调用中的“put”关键字,但我不知道为什么,或者那里发生了什么。我正在使用rails版本3.2.13和rspec-rails版本2.11.0

编辑:如果我在测试语句的开头插入puts user(但在let语句之后),我收到错误:

undefined local variable or method `user' for #<Class:0x007fd4943743d8>

1 个答案:

答案 0 :(得分:0)

如果有人好奇,我发现我在某些问题上遇到的错误,虽然更好的解释会很棒。

基本上我强迫rails应用程序使用ssl,出于某种原因,rspec真的不喜欢这样。评论ssl线解决了所有问题。