如何更改 Rspec 中的默认控制器?

How do I change the default controller in Rspec?

我需要身份验证才能成功通过测试。

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?

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

您尝试执行的操作称为 "feature spec"(或 "integration spec")。这是一种不同类型的规范,您也应该编写其中的一些规范。