rspec请求测试登录,无需设计

rspec请求测试登录,无需设计,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 规格/要求/类似表格规

我想在请求测试中登录一个用户,但无法使其正常工作。我没有使用这个设备

这是我的密码

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 
规格/要求/类似表格规格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这样的快捷方式方法,否则您需要编写一个方法,单击登录并填写表单并断言已完成登录,然后每次调用该方法(在前滑轮/吊钩或类似装置中)