如何使用 RSpec 测试 ActionText?
How to test ActionText using RSpec?
我正在尝试编写一个 RSpec 系统测试,其中涉及在页面上填写 ActionText / Trix 字段。
似乎 ActionText::SystemTestHelper
定义 here 可以帮助完成这项任务,但到目前为止我还没有成功实施它。
我的 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_in
RSpec 方法来完全避免这种情况,但随后得到:
无法找到未禁用的字段 "Description"
尽管测试被标记为 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
我不是 100% 确定,但似乎 ActionText::SystemTestHelper
可能还没有发布到 Rails 的 "stable" 版本。它可能会与下一个一起出现(或者你可能 运行 一个还不包含它的旧版本)。
您可以尝试以下几种方法:
- 更新 Rails 版本,看看是否有帮助
- 使用来自 github 的当前
master
Rails 版本(不推荐)
- 自己添加模块作为规范的辅助模块,然后在需要的地方自己包含它
这是我正在使用的脚本(只是将其作为帮助程序包括在内):
def fill_in_trix_editor(id, with:)
find(:css, "##{id}").click.set(with)
end
ActionText 创建模型 + 属性的带下划线的 ID。你也可以检查看看。
在spec/rails_helper.rb
中:
需要帮助文件并将模块包含在系统规范中:
require "action_text/system_test_helper"
RSpec.configure do |config|
config.include ActionText::SystemTestHelper, type: :system
end
您现在可以在您的系统规格中使用 fill_in_rich_text_area
助手:
fill_in_rich_text_area "page_content", with: "Some content."
…其中 "page_content"
是 trix-editor 的 id。
富文本区域也可以通过 placeholder 属性的值、aria-label 属性的值、标签中的文本或输入的名称来找到。
如果页面上只有一个编辑器,则可以省略第一个参数,如下所示:
fill_in_rich_text_area with: "Some content."
我正在尝试编写一个 RSpec 系统测试,其中涉及在页面上填写 ActionText / Trix 字段。
似乎 ActionText::SystemTestHelper
定义 here 可以帮助完成这项任务,但到目前为止我还没有成功实施它。
我的 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_in
RSpec 方法来完全避免这种情况,但随后得到:
无法找到未禁用的字段 "Description"
尽管测试被标记为 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
我不是 100% 确定,但似乎 ActionText::SystemTestHelper
可能还没有发布到 Rails 的 "stable" 版本。它可能会与下一个一起出现(或者你可能 运行 一个还不包含它的旧版本)。
您可以尝试以下几种方法:
- 更新 Rails 版本,看看是否有帮助
- 使用来自 github 的当前
master
Rails 版本(不推荐) - 自己添加模块作为规范的辅助模块,然后在需要的地方自己包含它
这是我正在使用的脚本(只是将其作为帮助程序包括在内):
def fill_in_trix_editor(id, with:)
find(:css, "##{id}").click.set(with)
end
ActionText 创建模型 + 属性的带下划线的 ID。你也可以检查看看。
在spec/rails_helper.rb
中:
需要帮助文件并将模块包含在系统规范中:
require "action_text/system_test_helper"
RSpec.configure do |config|
config.include ActionText::SystemTestHelper, type: :system
end
您现在可以在您的系统规格中使用 fill_in_rich_text_area
助手:
fill_in_rich_text_area "page_content", with: "Some content."
…其中 "page_content"
是 trix-editor 的 id。
富文本区域也可以通过 placeholder 属性的值、aria-label 属性的值、标签中的文本或输入的名称来找到。
如果页面上只有一个编辑器,则可以省略第一个参数,如下所示:
fill_in_rich_text_area with: "Some content."