如何更改 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")。这是一种不同类型的规范,您也应该编写其中的一些规范。
我需要身份验证才能成功通过测试。
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")。这是一种不同类型的规范,您也应该编写其中的一些规范。