2012-03-27 75 views
4

我正在嘗試使用Rails自己的測試系統在用戶模型上進行一些集成測試,如用戶模型中出現的rails教程。導軌集成測試問題

在routes.rb中我做了以下映射:

match '/signup', to: 'users#new' 

測試看起來像這樣:

class UserStoriesTest < ActionDispatch::IntegrationTest 
    test "sign up" do 
    User.delete_all 
    post_via_redirect "/users", 
      user: {name: 'david', 
        email: '[email protected]', 
        password: 'qwe123', 
        password_confirmation: 'qwe123'} 
    assert_response :success 
    users = User.all 
    assert_equal 1, users.size, users.size 
    end 
end 

無論我做什麼,我不能讓它創建一個新的記錄,以便第二個斷言失敗。 我也嘗試通過設置錯誤的確認密碼來破壞它,並且它在第一個斷言中沒有失敗。 我只嘗試發佈帖子而不是post_via_redirect,或者使用「註冊」路徑而不是「/ users」,但沒有任何更改。

我一定在做一些愚蠢的事情。我在這裏錯過什麼?

問候。

回答

0

您實際上並未填寫註冊表單。它看起來像你使用的測試::單元,你需要它webrat或水豚來處理請求規格,我推薦後者。

https://github.com/brynary/webrat

0

這種反應可能是老了多大用處的給你,但有兩件事情站出來給我。

1)這不應該是一個集成測試,因爲你沒有測試多個控制器之間的交互。這應該是一個功能測試,用於測試單個控制器,在這種情況下是您的UsersController。這是非常重要的,因爲不同的方法和功能根據你的聲明是可用/加載的。

class UserStoriesTest < ActionDispatch::IntegrationTest 

會給你一個非常不同的環境

class UserTest < ActiveSupport::TestCase 

注意,集成測試是ActionDispatch的部分,而功能測試的ActiveSupport的一部分。我強烈建議將其移至功能測試,這可能是您錯誤的根源。

2)使用delete_all有點極端。實際上,當你發佈帖子時,你可以做一個斷言測試,看看是否存在計數差異。

assert_difference('User.count') do 
    post :create, :user => {name: 'david', 
       email: '[email protected]', 
       password: 'qwe123', 
       password_confirmation: 'qwe123'} 
end 

這將斷言User.count不同於運行do循環中和do循環結束之前的內容。那裏的那個街區可以取代你在「註冊」測試中的一切。有趣的是,您可以將assert_difference更改爲assert_no_difference,如果通過,您知道您的users_controller.rb中的post方法有問題(這是我認爲您的問題實際存在的地方)。

3)您的assert_equal行看起來有點奇怪。通過的最後一個參數是它在失敗時會吐出的消息。只打印一個數字可能適用於一項測試,但在許多測試中看起來會很奇怪。這樣的東西,因爲我相信下面是接近規範:

assert_equal 1, User.count, "Expected User.count to be equal to 1, instead it is equal to: " + User.count.to_s 

另外請注意,你可以使用的,而不是做一些像把所有的記錄成一個對象,然後調用該對象的大小ModelName.count 。這很快就會變得非常混亂。

最後,作爲一個通用的調試工具,您可以在整個地方拋出puts語句或logger語句來查看實際正在進行的操作。

puts User.count 

在你的delete_all和你的post_via_redirect會很快告訴你哪裏出了問題。如果您使用記錄器方法,它將被寫入到您的appname/log/ENV.log中的日誌中。所以如果你正在運行測試,它將在test.log中。

logger.debug User.count 

你的日誌也將保持所有的請求的記錄,這樣你就可以閱讀,看看你得到200個OKS,302個重定向等

我建議您查看所提供的以下指南導軌,他們是偉大的起點地方:

http://guides.rubyonrails.org/testing.html

http://guides.rubyonrails.org/debugging_rails_applications.html

希望這^ h幫助別人!