2013-01-15 34 views
0

我對RSpec仍然很熟悉,並且在爲我的多租戶應用設置測試時遇到了一些問題。多租戶和rspec

的應用程序工作在:

client1.example.com

client2.example.com

等....

在我的RSpec的我做了以下內容:

let(:tenant) { FactoryGirl.create(:tenant, subdomain: "client1") } 
let(:root_path) { "http://client1.example.dev:3000" } 

before { 
    tenant.save 
    visit root_path 
} 

describe "header" do 
    it "should have the right title" do 
    page.should have_selector('title', :text => tenant.name) 
    end 
end 

我在做一些在這裏感覺不對的東西,但不知道什麼是最好的方法是。

  1. 我很難編碼root_path。像visit '/'這樣的操作不起作用,因爲測試不知道什麼是正確的子域。這個可以嗎?

  2. 我不知道爲什麼,但我必須在每次測試前做tenant.save,以便測試實際能夠根據子域找到租戶。如果我刪除tenant.save,我得到一個Couldn't find Tenant with subdomain = client1錯誤。我以爲FactoryGirl.create實際上保存到數據庫?

感謝您的幫助!

回答

0

1:似乎有必要這樣做,我不認爲有一種方法可以指定只有子域。

2:是的,create保存到數據庫(而build沒有)。但是,RSpec的let是懶惰的 - 它只是在第一次調用時才進行評估。

這意味着沒有tenant.save租戶將不會創建,直到page.should have_selector('title', :text => tenant.name)發生 - visit呼叫之後,所以爲時已晚。

幸運的是,RSpec中還提供let!這是let一個熱切的版本,所以如果你使用,你將不再需要在beforetenant.save

+0

太棒了 - 謝謝! – cman77