【发布时间】:2017-11-20 09:18:31
【问题描述】:
我有一个控制器文件:
some_controller.rb:
class SomeController < ActionController::Base
def get_params
# Do something with params
end
end
还有一个帮助文件:
module SomeHelper
def modify_params
get_params
end
end
和帮助器的 rspec 文件:
require 'spec_helper'
describe SomeHelper do
describe 'check_if_param_has_key' do
it "checks if param has key" do
modify_params.should eql(true)
end
end
在这里,我在辅助方法中调用控制器的方法。现在我正在为辅助方法modify_param 编写测试用例。
但它会引发错误:NoMethodError: get_params
有没有办法在帮助规范中访问控制器的方法? 这是正确的方法吗?还是我错过了什么?
已编辑: 控制器是 ApplicationController,其中的方法返回字符串,其中包含在页面加载时调用的控制器/方法,通过查看 params[:controller]、params[:action]
【问题讨论】:
-
方法不是全局的。您不能只从任何其他位置访问任何方法。所以简短的回答是:不,这是不可能的。不过,如果您能分享更多关于这些方法实际作用的背景信息,我很乐意提供建议的设计。
-
不可能。实际上在您的情况下也不需要。当我们测试助手代码时,我们不需要调用控制器动作,您可以存根这些动作(因为您将在控制器测试和集成测试中测试这些动作)。所以你需要的只是存根。
-
好的,谢谢大家。我在想,由于我正在调用辅助方法,它必须具有它正在调用的控制器方法的上下文。我会检查存根解决方案。
-
@TomLord - 控制器是 ApplicationController,通过查看 params[:controller]、params[:action],其中的方法返回字符串,其中包含在页面加载时调用了哪个控制器/方法。我在帮助文件中使用此方法来检查是否调用了控制器的特定方法,基于该方法我在视图端执行了某些操作。
标签: ruby-on-rails ruby rspec