【问题标题】:How do I change the default controller in Rspec?如何更改 Rspec 中的默认控制器?
【发布时间】:2019-06-03 07:04:37
【问题描述】:

我需要认证才能成功通过测试。

describe PostsController do
  let(:user) { create(:user) }
  describe 'POST #create' do
    let(:create_post) { post :create, params: { post: attributes_for(:post) } }

    before do
      post sessions_path, params: { login: user.email, password: user.password }
    end

    context 'with valid attributes' do
      it 'return OK' do
        create_post
        expect(response).to have_http_status(200)
      end
  end
end

post session_path - 这不起作用并产生错误:

No route matches {:action=>"/sessions", :controller=>"posts", :login=>"jack@example.com", :password=>"qwerty"}

如何在 before 块中将默认 PostsController 更改为 SessionsController?

【问题讨论】:

    标签: ruby-on-rails ruby rspec routing


    【解决方案1】:

    在控制器规范中,您只与被测控制器交谈。如果您需要其他控制器首先创建一些先决条件对象 - 直接在数据库中创建它们。如果您需要经过身份验证的用户 - 直接设置 session[:user_id] (或者它是您的身份验证工作)。例如,请参阅this answer

    您尝试执行的操作称为“功能规范”(或“集成规范”)。这是一种不同类型的规范,您也应该编写其中一些规范。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-23
      • 2014-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-02
      • 2018-12-16
      • 1970-01-01
      相关资源
      最近更新 更多