2011-12-28 51 views
7

我正在使用RSpec,Spork,Capybara和Capybara Mechanic爲使用Facebook連接的註冊路徑編寫集成測試。它通過註冊正確導航,但新用戶在我的開發數據庫而不是測試數據庫中創建。如何在水豚中使用測試數據庫?

RSpec設置爲使用測試環境,並且我已確認在規範中運行的任何模型方法都會碰到測試數據庫,但所有UI操作都會觸發開發。

這裏是我的測試:

it "go through registration path" do 
    print "RAILS_ENV: #{Rails.env}\n" # correctly prints 'test' 
    print "1) #{User.count}\n" # correctly shows the user count in my test database (zero) 

    Capybara.current_driver = :mechanize 

    visit root_path 
    click_link "register" 

    # Fill in Facebook Connect form 
    fill_in 'email', :with => "[email protected]" 
    fill_in 'pass', :with => "password" 
    click_button "Log In" 

    print "2) #{User.count}\n" # still shows zero users in the test database 

end 

是測試我可以看看我的開發數據庫和新用戶已經創建有後。

我試過設置database_cleaner,並沒有幫助。

任何人都知道我需要做什麼,以便水豚會擊中測試數據庫?

軌3.1.3

rspec的2.7.0

叉勺0.9.0

水豚1.1.0

水豚,機械化0.3.0.rc3

+0

你最終爲自己解決了這個問題嗎?我正在處理的應用中遇到類似問題。我試圖用測試中的記錄登錄,但它說這個記錄不存在。所以我認爲它與使用開發環境有關,但是向開發者添加記錄也表明它不存在。所以我不確定Capybara是否使用完全不同於rspecs測試環境的數據庫/環境。 – JDutil 2012-02-01 18:06:10

+0

看到我的答案爲修復。你如何創建你的用戶?我正在使用插入到測試數據庫的FactoryGirl。 – Chris 2012-02-01 21:50:15

+0

我也使用FactoryGirl。正在按照預期在測試數據庫內創建記錄。當我將驅動程序更改爲Selenium或Webkit並且瀏覽器需要與記錄進行交互時,他們不會返回,儘管...我已嘗試設置服務器設置,如您的答案,因爲我一直在考慮我的POW配置導致它運行在瀏覽器中處於開發模式,但事實並非如此。 – JDutil 2012-02-02 02:52:50

回答

4

問題是因爲我有一個獨立的開發服務器與測試並行運行,並且測試默認爲相同的地址/端口。我通過將以下內容添加到spec_helper.rb中解決了這個問題,所以Capybara會使用不同的端口。

Capybara.run_server = true 
Capybara.server_port = 7000 
Capybara.app_host = "http://localhost:#{Capybara.server_port}"