我正在尝试通过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>
答案 0 :(得分:0)
如果有人好奇,我发现我在某些问题上遇到的错误,虽然更好的解释会很棒。
基本上我强迫rails应用程序使用ssl,出于某种原因,rspec真的不喜欢这样。评论ssl线解决了所有问题。