rspec请求测试登录,无需设计
我想在请求测试中登录一个用户,但无法使其正常工作。我没有使用这个设备 这是我的密码 spec/support/spec\u test\u helper.rbrspec请求测试登录,无需设计,rspec,capybara,ruby-on-rails-5,Rspec,Capybara,Ruby On Rails 5,我想在请求测试中登录一个用户,但无法使其正常工作。我没有使用这个设备 这是我的密码 spec/support/spec\u test\u helper.rb module SpecTestHelper def log_user_in(user) post login_path, params: {session: {email: user.email, password: 'password'}} end end 规格/要求/类似表格规
module SpecTestHelper
def log_user_in(user)
post login_path, params: {session: {email: user.email, password: 'password'}}
end
end
规格/要求/类似表格规格rb
require 'rails_helper'
RSpec.describe 'LikeATable', type: :request do
it 'will put table in wish list' do
log_user_in(create(:user))
expect(page).to have_content('My profile')
end
end
这给了我一个错误
Capybara::ElementNotFound:
找不到xpath“/html”您正在请求规范中使用不支持的Capybara会话方法-。您不应该将Capybara::DSL包含在“request”类型的规范中。但是,如果需要,您可以包括Capybara::RSpecMatchers,但需要根据字符串调用它们
expect(response.body).to have_content('My profile')
原因是您不能将
get/post/put/delete
方法与page
混合使用page
和任何其他Capybara::DSL方法只有在您使用visit
加载页面时才相关。谢谢您的回答,但现在我将其更改为feature test,它为#@Rosalie提出了错误未定义的方法“post”-是的,正如我所说的,您不能将get/post/put/delete
与Capybara混用。功能测试将使用Capybara,因此您不能使用post
——您唯一可以使用的就是visit
。要使用post
您需要是一个请求规范,其中不能使用任何Capybara会话方法、操作、查找器等-只有字符串匹配器(response.body)啊,好吧,那么这是否意味着,如果我想模拟一个只有登录用户才能执行的场景,我还必须首先执行登录场景?(如单击登录并填写表单)或者是否有一种简单的方法可以作为登录用户执行场景,而无需再次执行登录场景?对不起,我提出了一些愚蠢的问题。我对rails或rails非常陌生testing@Rosalie除非您通过Warden::Test::Helpers(如所示)的Warden中间件实现Deviate这样的快捷方式方法,否则您需要编写一个方法,单击登录并填写表单并断言已完成登录,然后每次调用该方法(在前滑轮/吊钩或类似装置中)