2013-03-18 27 views
6

Rails 3.2,RSpec 2.11。控制器宏不起作用,它似乎是從我所做的所有研究中正確寫入的。下面的代碼RSpec控制器宏不工作

/spec/support/controller_macros.rb

module ControllerMacros 
    def login_user 
    before(:each) do 
     @request.env["devise.mapping"] = Devise.mappings[:user] 
     user = FactoryGirl.create(:user) 
     @current_user = user 
     sign_in user 
    end 
    end 
end 

/spec/spec_helper.rb

RSpec.configure do |config| 
    .... 
    config.extend ControllerMacros, :type => :controller 
end 

/spec/controllers/companies_controller_spec.rb

require File.dirname(__FILE__) + '/../spec_helper' 

describe CompaniesController, "index companies" do 
    context "for authenticated users" do 
     login_user 
     ... 
    end 
end 

執行結果: 未定義的局部變量或方法'login_user'for#(NameE RROR)

回答

2

似乎已經回答了here,你需要改變你的extendinclude

+0

我曾試過。相同的結果。 – justindfunk 2013-03-18 15:20:39

+1

如果從宏中刪除before(:each),並將login_user放入規範中的before(:each)塊內,該怎麼辦? – omnikron 2013-03-18 15:22:10

+0

你的描述區塊看起來有點奇怪,如果你刪除了''「索引公司」,它會起作用嗎? – omnikron 2013-03-18 15:24:01

1

添加規範型固定對我來說:

前:

describe Api::FooController do 
    . 
    . 
end 

後:

describe Api::FooController, type: :controller do 
    . 
    . 
end 
+0

這應該是真正的答案。內聯代碼從來就不是答案。 – friedrich 2016-03-31 12:55:18