2012-10-10 75 views
4

可能重複:
Testing modules in rspec測試嵌套模塊使用RSpec和軌道

目前,我成功地測試我的模塊使用RSpec像這樣:

require 'spec_helper' 

module Services 
    module AppService 
    describe AppService do 
     describe "authenticate" do 
     it "should authenticate the user" do 
      pending "authenticate the user" 
     end 
     end 
    end 
    end 
end 

我模塊生活in app/services/services.rb app/servi ces/app_service.rb

但是,有沒有一個更優雅的解決方案來測試我的模塊,而無需在規範中聲明命名空間?我覺得它變得與我的規格緊密相關,並且做出改變會引起很多頭痛。

+0

請參閱http://stackoverflow.com/questions/1542945/testing-modules-in-rspec – Benissimo

+3

這不是問題1542945的重複,這個問題關於嵌套模塊一般不測試模塊。 –

+0

@Deefour - 正如David Basarab所說,這不是1542945的重複。這是一個很好的問題,我找不到真正的副本。 – Powers

回答

9

,而不是複製AppServices的,你可以這樣做:

module Services 
    describe AppService do 
    end 
ene 

或者:

describe Services::AppService do 
end 

我傾向於選擇前者,因爲它允許在規範我不是完全限定的常量名(因爲所有內容都在Services模塊中,所以首先看起來與此相關)。

+0

我嘗試了這兩種方法,並得到一個加載錯誤https://gist.github.com/3869226。我的名字空間如下https://gist.github.com/3869225。我是否需要服務模塊?這似乎緊密耦合... –

+0

好吧,所以我做了一個require_relative,它解決了我。但我覺得我應該可以做到這一點,而不需要文件... –

+0

你已經走進了Rails自動加載的區域。我個人討厭自動加載,並且更喜歡在他們使用的地方要求我的文件。它可以幫助我進行更快的測試(每個測試可以獨立運行,只需要加載它),並有助於表面耦合點 - 我必須顯式加載依賴項,因爲它不會自動爲我加載。 –