7

我正在尝试编写一个 RSpec 系统测试,其中涉及在页面上填写 ActionText / Trix 字段。

似乎此处ActionText::SystemTestHelper定义的内容可用于帮助完成此任务,但到目前为止,我在实施它方面没有任何成功。

我的 RSpec 测试如下所示:

# spec/system/add_job_posting_spec.rb

require 'rails_helper'

RSpec.describe 'adding a job posting', type: :system do
  let(:user) { FactoryBot.create :user }

  before do
    login_as(user)
    visit new_job_posting_path
  end

  context 'with valid information' do
    let(:valid_job_posting) { FactoryBot.create :job_posting }

    scenario 'creates a job posting', js: true do
      fill_in 'Title', with: valid_job_posting.title
      fill_in_rich_text_area 'Description', with: 'Job Info'

      click_button 'Submit'
      expect(page).to have_content 'Job was successfully created.'
    end
  end
end

我也尝试过创建一个 RSpec 支持文件

# spec/support/action_text.rb

RSpec.configure do |config|
  config.include ActionText::SystemTestHelper, type: :system
end

当我使用

bundle exec rspec spec/system/add_job_posting_spec.rb

我收到以下错误 未初始化常量 ActionText::SystemTestHelper

当我尝试删除位于的文件时,spec/support/action_text.rb我收到此错误:

未定义的方法`fill_in_rich_text_area'

我也尝试只使用常规的fill_inRSpec 方法来完全避免这种情况,然后得到:

找不到未禁用的字段“描述”

尽管测试被标记为js: true并且我有另一个 RSpec 支持文件来处理设置如下:

# spec/support/system/driver.rb

RSpec.configure do |config|
  config.before(:each, type: :system) do
    driven_by :rack_test
  end

  config.before(:each, type: :system, js: true) do
    ActiveRecord::Base.establish_connection
    driven_by :selenium_chrome_headless
  end
end
4

3 回答 3

5

In spec/rails_helper.rb:

Require the helper file and include the module in the system specs:

require "action_text/system_test_helper"

RSpec.configure do |config|
  config.include ActionText::SystemTestHelper, type: :system
end

You can now use the fill_in_rich_text_area helper in your system specs:

fill_in_rich_text_area "page_content", with: "Some content."

…where "page_content" is the id of the trix-editor.

The rich text area can also be found by the value of placeholder attribute, value of the aria-label attribute, the text from its label or by the name of its input.

The first argument can be omitted if you only have one editor on the page, like this:

fill_in_rich_text_area with: "Some content."
于 2020-12-12T20:27:33.347 回答
2

这是我正在使用的脚本(只需将其作为帮助程序包含在内):

def fill_in_trix_editor(id, with:)
  find(:css, "##{id}").click.set(with)
end

ActionText 创建模型 + 属性的下划线 id。你也可以检查看看。

于 2020-05-25T04:49:04.687 回答
0

我不是 100% 确定,但似乎ActionText::SystemTestHelper可能还没有发布到 Rails 的“稳定”版本中。它可能会与下一个一起出现(或者您可能正在运行尚未包含它的旧版本)。

您可以尝试以下几件事:

  • 更新 Rails 版本,看看是否有帮助
  • master使用来自 github 的当前Rails 版本(不推荐)
  • 自己添加模块作为规范的帮助模块,然后在需要的地方自己包含它
于 2019-10-11T13:39:51.767 回答