gpt4 book ai didi

ruby-on-rails - Cookie不会在Rails 3.1的Rspec中持续存在

转载 作者:行者123 更新时间:2023-12-04 03:40:22 26 4
gpt4 key购买 nike

在以下环境中,这是 Controller 规范中的cookie收集问题:

  • rails 3.1.0.rc4
  • rspec 2.6.0
  • rspec-rails 2.6.1

  • 我有一个简单的 Controller 规范,可以创建Factory用户,调用设置cookie的登录方法,然后进行测试以查看登录的用户是否可以访问页面。问题是在设置身份验证Cookie和在 Controller 上调用“show”操作之间,所有Cookie似乎都消失了。

    在rails dev服务器上的浏览器中运行时,我的代码可以正常工作。运行规范时,甚至更奇怪的行为是,尽管cookie哈希设置的所有设置消失了,但通过 session 哈希设置的所有设置仍然存在。我只是缺少有关使用rspec时cookie如何工作的信息吗?

    规范代码
    it "should be successful" do
    @user = Factory(:user)
    test_sign_in @user
    get :show, :id => @user
    response.should be_success
    end

    登录代码
    def sign_in(user, opts = {})
    if opts[:remember] == true
    cookies.permanent[:auth_token] = user.auth_token
    else
    cookies[:auth_token] = user.auth_token
    end
    session[:foo] = "bar"
    cookies["blah"] = "asdf"
    self.current_user = user
    #there are two items in the cookies collection and one in the session now
    end

    由于cookie [:auth_token]为nil,因此对get:show请求的身份验证检查在此处失败
    def current_user
    #cookies collection is now empty but session collection still contains :foo = "bar"... why?
    @current_user ||= User.find_by_auth_token(cookies[:auth_token]) if cookies[:auth_token]
    end

    这是一个错误吗?这是我不了解的某种预期行为吗?我只是在看一些明显的东西吗?

    最佳答案

    这就是我解决的方法:

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

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

    def signed_in?
    return !current_user.nil?
    end

    由于某种原因,您必须同时设置@current_user和current_user才能使其在Rspec中工作。我不知道为什么,但是由于它在浏览器中工作正常,它使我完全疯了。

    关于ruby-on-rails - Cookie不会在Rails 3.1的Rspec中持续存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6821692/

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