2016-04-27 18 views
1

Ich habe set_seo Methode in meiner ApplicationRails rspec nicht definierte Methode für # <RSpec :: ExampleGroups

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 

und möchte meine BrandsController testen, die diese Methode

def index 
    #some code here 
    set_seo(@content) 
end 

meinen Controller spec

enthalten
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 

aber ich habe bekam

NoMethodError: 
    undefined method `set_seo' for #<RSpec::ExampleGroups::BrandsController::GETIndex:0x007f866daa96c8> 

Antwort

0

set_seo ist nicht in Ihren Spezifikationen definiert, daher der undefined method Fehler. Sie müssen Methoden als Symbole für Mocks/Stubs übergeben (mit anderen Worten, Sie ersetzen oder verspotten das Verhalten der Methode, rufen sie nicht direkt auf).

Das sagte, was ist der Sinn dieser Zeile: allow(ApplicationController).to receive(set_seo(@content)).and_return(set_seco(@content))? Sagt es nicht :set_seo zurückgeben, was es bereits zurückgibt?

Wenn Sie versuchen, um sicherzustellen, dass set_seo tatsächlich aufgerufen wird, verwenden Sie die folgende:

expect_any_instance_of(ApplicationController).to receive(:set_seo).with(@content).and_call_original 
Verwandte Themen