假设有一个Rails引擎engine_one,它具有一个spec支持文件engine_one/spec/support/system/order_functions.rb
,其中包含用于支持测试各种订单系统测试的功能,例如模拟已登录用户、向订单添加产品等,并包含一些方法,如log_visitor_in,在测试订单处理时被广泛使用。
现在在扩展了一些来自engine_one的订购功能的engine_two中,我希望添加一个新的系统测试,该测试首先必须登录访问者。那么我该如何利用来自engine_one的这个支持方法呢?
到目前为止,我已经在dummy应用程序中安装了这两个引擎,已经在engine_two/lib/engine.rb中要求engine_one,也已经在相关测试中要求了support文件,但是找不到它,同时我已经将engine_one添加到engine_two.gemspec中。
engine_two/spec/rails_helper.rb
require 'engine_one' # and any other gems you need
engine_two/lib/engine_two/engine.rb
require 'engine_one'
在相关系统测试中,我有以下内容:
engine_two/spec/system/new_payment_methods_spec.rb
require 'rails_helper'
include EngineOne::System
RSpec.describe "order_payment_feature", type: :system do
before do
driven_by(:rack_test)
end
it "has order payment options" do
log_visitor_in
end
end
导致以下错误。
Failure/Error: include EngineOne::System
NameError:
uninitialized constant EngineOne::System
Did you mean? SystemExit
并且这个助手
module System
def log_visitor_in()
administrator = create(:visitor)
visit ccs_cms.login_url
fill_in 'login_name', with: visitor.login_name
fill_in 'Password', with: visitor.password
click_button 'Login'
end
end
我曾经试过使用require
代替include
,但是这导致了一个文件未找到的错误。
此外,我尝试将 include 路径更改为 EngineOne::Spec::Support::System
,结果是相同的错误。
因此,我猜我正在寻找正确的路径,但我卡住了或者缺少其他包含助手的方法。
这些是Rails 7引擎。