gpt4 book ai didi

ruby-on-rails - railstutorial.org - rspec 失败但在浏览器中一切正常

转载 作者:行者123 更新时间:2023-12-04 03:33:52 25 4
gpt4 key购买 nike

我正在尝试关注 Rails Tutorial,但我的 rspec 失败了,但在浏览器中,该应用程序可以按需运行。那是当我登录(在浏览器中)并转到“http://localhost:3000/users/1/edit”时,此页面打开。本教程中所有先前的 rspecs 均已通过。

我正在使用 Rails“3.1.0.rc4”并在 Windows 中工作。

失败的规范(来自 users_controller_spec.rb):

describe "GET 'edit" do
before(:each) do
@user = Factory(:user)
test_sign_in(@user)
end

it "should be successful" do
get :edit, :id => @user
response.should be_success
end
end

来自 spec_helper.rb 的 test_sign_in 代码:

RSpec.configure do |config|  
config.mock_with :rspec

config.fixture_path = "#{::Rails.root}/spec/fixtures"

config.use_transactional_fixtures = true

def test_sign_in(user)
controller.sign_in(user)
end
end

工厂代码.rb

Factory.define :user do |user|
user.name "Mikhail"
user.email "mikleb@yandex.ru"
user.password "123456789a"
user.password_confirmation "123456789a"
end

来自控制台的文本:

Failures:

1) UsersController GET 'edit should be successful
Failure/Error: response.should be_success
expected success? to return true, got false
# ./spec/controllers/users_controller_spec.rb:111:in `block (3 levels) in <
top (required)>'

UPD:在“get :edit, :id => @user”之后用户没有登录。但是正如我在浏览器中写的那样,一切都按需要工作。这怎么可能?

这是包含在 ApplicationControlelr 中的 SessionHelper:

module SessionsHelper
def sign_in(user)
cookies.permanent.signed[:remember_token] = [user.id, user.salt]
self.current_user = user
end

def sign_out
cookies.delete(:remember_token)
self.current_user = nil
end

def signed_in?
!current_user.nil?
end

def current_user=(user)
@curent_user = user
end

def current_user
@current_user ||= user_from_remember_token
end

def deny_access
redirect_to signin_path, :notice => "Please sign in to access this page."
end

private
def user_from_remember_token
User.authenticate_with_salt(*remember_token)
end

def remember_token
cookies.signed[:remember_token] || [nil, nil]
end
end

最佳答案

您是否转储了 response.body 以查看 Rspec 认为它看到的是什么?您可能(我忘了这是否仍然有必要)需要启用 render_views,如 in this question 所述).

是否有可能用户没有真正登录,因此站点从编辑重定向到登录页面或类似的页面?

另一个警告,如果 HTTP 代码是 2xx 代码(200 ok,201 created 等),我很确定 rspec 只为 be_success 返回 true。因此,如果您的 Controller 正在重定向(302、304 等),则 rspec 不会将请求视为“已成功”。

尝试在断言之前放入 puts response.body,这可能会帮助您缩小问题范围。

关于ruby-on-rails - railstutorial.org - rspec 失败但在浏览器中一切正常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6767466/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com