我的ApplicationController中有set_seo方法
def set_seo(page)
set_meta_tags :site => '', :title => page.seo_title ? page.seo_title : '', :reverse => true,
:description => page.seo_description ? page.seo_description : ""
end
并想测试包含此方法的BrandsController
def index
#some code here
set_seo(@content)
end
我的控制器规范
require 'spec_helper'
describe BrandsController do
render_views
before(:all) do
@content = create(:content)
create(:user)
end
describe "GET index" do
it "index" do
allow(ApplicationController).to receive(set_seo(@content)).and_return(set_seco(@content))
brand = Brand.create
get :index
expect(response).to render_template(:index)
end
但我有
NoMethodError:
undefined method `set_seo' for #<RSpec::ExampleGroups::BrandsController::GETIndex:0x007f866daa96c8>
答案 0 :(得分:0)
set_seo
,因此出现undefined method
错误。你必须将方法作为模拟/存根的符号传递(换句话说,你正在替换或“模仿”方法的行为,而不是直接调用它。)
那说,这一行有什么意义:allow(ApplicationController).to receive(set_seo(@content)).and_return(set_seco(@content))
?是不是告诉:set_seo
返回它已经返回的内容?
如果您要确保实际调用set_seo
,请使用以下命令:
expect_any_instance_of(ApplicationController).to receive(:set_seo).with(@content).and_call_original