ruby-on-rails - 如何在辅助规范中使用控制器方法?
问题描述
我正在为data_session_helper_spec文件编写规范测试,如下所示:
data_session_helper_spec.rb
describe "#methods" do
let(:data_session1) { create(:data_session) }
let(:data_session2) { create(:data_session) }
let(:data_session3) { create(:data_session) }
describe "#collect_sessions_with_today_if_needed" do
let!(:team) { create(:program_team, data_sessions: [data_session2, data_session3]) }
let!(:current_user) { create(:user) }
it "returns an array with all the data sessions :team" do
session[:current_program_team_id] = team.id
expect(collect_sessions_with_today_if_needed)
.to contain_exactly(["Today", 0],
[data_session_label(data_session2).to_s, data_session2.id],
[data_session_label(data_session3).to_s, data_session3.id])
end
end
...
end
方法collect_sessions_with_today_if_needed在DataSessionHelper文件中声明,它看起来像这样:
data_session_helper.rb
module DataSessionHelper
def collect_sessions_with_today_if_needed
collection = DataSession.by_team(current_program_team)
.where("data_sessions.session_date <= ?", Time.zone.now.to_date)
.order(session_date: :desc).selector_data.map { |session| [data_session_label(session), session.id] }
if DataSession.find_by(session_date: Date.current, program_team: current_program_team, user: current_user).present?
collection
else
collection.unshift(["Today", 0])
end
end
...
end
当我尝试为data_session_helper_spec运行 rspec 时,我收到一个错误,即current_program_team未定义并且该方法在 ApplicationController 中定义。
application_controller.rb
class ApplicationController < ActionController::Base
helper_method :current_program_team
def current_program_team
ProgramTeam.friendly.find_by(id: session[:current_program_team_id])
end
在为帮助程序运行规范时如何访问应用程序控制器方法?
解决方案
在控制器之外使用会话和未定义的方法是一种不好的做法。最好将此参数传递给方法(这将很容易测试)。如果你想保留你的解决方案,你可以这样做:
let(:helper_class) do
Class.new do
include DataSessionHelper
def current_program_team
...
end
end
end
并测试此类实例的行为
推荐阅读
- python - Python tkinter Frame,在另一个 Frame 中有多个小部件
- python - 遍历 json 结果并在 pandas 数据框中获取所需的数据
- javascript - Blazor 服务器 - 如何从 _Host.cshtml 中的 Javascript 调用 C# 方法
- python - 在 Dataframe 上进行 Pandas 列搜索,Pandas 搜索功能的复杂性和优化
- firebase - 如何在服务器端(后端)运行事件处理程序代码?
- python-3.x - jupyter contrib nbextension install --user 错误
- typescript - 打字稿:如何从其他参数派生参数类型
- c++ - C++ 从 txt 文件中读取 UTF-8(立陶宛字母)符号并在控制台应用程序中显示它们
- aws-nuke - 如果 aws-nuke 大多失败,如何对 aws 进行核攻击
- r - 如何订购分组箱线图?