2010-07-06 62 views
19

經過3年的拖延,今天是我開始測試Rails應用程序的那一天。我的第一步是在我的Rails 3 beta4應用程序中修復失敗的測試。在設計Rails中進行功能測試

我最近3次失敗的測試與設計寶石及其authenticate_user有關!方法在我的控制器頂部的before_filter中。

通過幫助我解決這個問題,你會獲得很大的業力,因爲它可以使我從現在開始使用TDD方法。

這是困擾我的錯誤:

1) Error: 
test_should_get_accepted(ModerationControllerTest): 
NoMethodError: undefined method `authenticate!' for nil:NilClass 
    /test/functional/moderation_controller_test.rb:10:in `test_should_get_accepted' 

設計只是給功能測試指針和助手在此頁:http://github.com/plataformatec/devise,但我只是不知道如何把這個變成應用。

你能否給這個測試noob一些關於如何使用這些助手的詳細說明?

回答

50

我花了一段時間,但我找到了方法。這是任何人都停留在相同點:

在moderation_controller_test.rb的頂部,下面的類聲明,添加這一行:

include Devise::TestHelpers 

我有2個記錄在我的用戶燈具和我在用戶必須被授權執行操作的每個測試中添加此行。

sign_in User.first 

當然,一旦你知道如何去做,它就已經很簡單了。

+3

它創建了其他錯誤以在Test_helper.rb文件中包含Devise :: TestHelpers。根據這個答案,它應該只包含在單個測試文件中:http://stackoverflow.com/questions/2839328/testing-devise-with-shoulda所以我編輯了你的答案 – vdaubry 2012-01-15 22:26:12

+1

問題不在於把它放在test_helper.rb本身。問題是,如果它的範圍沒有正確 - 它必須在類ActionController :: TestCase中。如果它包含在test_helper.rb中的ActiveSupport :: TestCase塊中,事情會變得很糟糕。 – jpgeek 2012-08-05 03:04:49

7

我對Rails比較新,所以我想添加一些對其他新人可能不明顯的東西。

關於用戶夾具,我不得不定義之一,但其留空,以這個工作:

# in users.yml  
joe: {} 

當使用色器件sign_in幫手,您可以在您的測試直接訪問哈希對象:

# a test method in some_controller_test.rb 
sign_in users(:joe) 

有關Rails燈具的更多信息,請參閱http://guides.rubyonrails.org/testing.html#the-low-down-on-fixtures

18

如果你想在設計測試助手提供給您所有的測試,你必須附上包括通過allesklar類聲明中提到在test_helper.rb底部是這樣的:

class ActionController::TestCase 
    include Devise::TestHelpers 
end 

更新:2017年1月25日

...導軌5個職位棄用警告&問你用...

Devise::Test::ControllerHelpers

+1

這應該是被接受的答案 – rndstr 2016-03-29 18:39:06

0

除了test_helpers中的代碼。RB,我說這在controller_test的頂部,它的工作對我來說:

require 'test_helper' 
1

https://github.com/plataformatec/devise逐字引用:

如果您使用RSpec的,你可以把下面的一個文件中命名spec/support/devise.rb

RSpec.configure do |config|

config.include Devise::TestHelpers, :type => :controller

end

現在,您可以使用您的RSpec測試sign_insign_out