Rails rspec未定义方法#<rspec :: examplegroups

时间:2016-04-27 14:07:44

标签: ruby-on-rails rspec controller

=“”

我的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>

1 个答案:

答案 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