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

时间:2019-06-03 07:04:37

标签: ruby-on-rails ruby rspec routing

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

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?

1 个答案:

答案 0 :(得分:1)

在控制器规格中,您仅与被测控制器通信。如果您需要其他控制器首先创建一些必备对象,请直接在数据库中创建它们。如果您需要经过身份验证的用户,请直接设置session[:user_id](或者这是您的身份验证方法)。例如,请参见this answer

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