我有一个控制器文件:
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
这里,我在helper方法中调用controller的方法。现在我正在为辅助方法modify_param
编写测试用例。
但它会引发错误:NoMethodError: get_params
有没有办法在辅助规范中访问控制器的方法? 这是正确的方法吗?或者我错过了什么?
编辑: 控制器是ApplicationController,其中的方法返回包含在页面加载时调用哪个控制器/方法的字符串,通过查看params [:controller],params [:action]
答案 0 :(得分:1)
由于RSpec的作者pointed out,辅助测试在概念上与控制器无关。所以,即使有办法,你也可能不想将控制器带入画面。您可以在规范中轻松删除方法调用:
describe SomeHelper do
describe "#foo" do
before do
allow(helper).to receive(:bar).and_return("hello")
end
it { expect(helper.foo).to eql("hello") }
end
end
即使你有一个控制器,你也可能需要在那里存根方法,以覆盖边缘情况。
请注意,如果您使用的是验证双打,那么在助手中未定义的方法的存根将会失败。
答案 1 :(得分:1)
我的问题已经通过向页面发出请求来解决:
describe 'check if the home page by checking params', :type => :request do
it 'return true if page is Home page' do
get "/homepage"
helper.modify_params.should eql(true)
end
end
在上面的代码中,在调用get请求到主页之后,helper方法将可以访问它正在调用的所有params和controller动作。我的所有测试用例都已通过。