[英]Making functional tests in Rails with Devise
經過3年的拖延,今天是我開始測試我的Rails應用程序的那一天。 我的第一步是在我的Rails 3 beta4應用程序中修復失敗的測試。
我最后3次失敗的測試與devise gem及其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'
Devise只是在這個頁面中提供了功能測試指針和幫助器: http : //github.com/plataformatec/devise但我不知道如何將它應用到應用程序中。
你可以給這個測試noob一些關於如何使用這些助手的詳細說明嗎?
我花了一段時間,但我找到了方法。 這是適合任何堅持同一點的人:
在moderation_controller_test.rb的頂部,在類聲明下面,添加以下行:
include Devise::TestHelpers
我的用戶夾具中有2條記錄,我在每個測試中添加了這一行,用戶必須被授權執行操作。
sign_in User.first
當然,一旦你知道如何去做就很簡單了。
如果您希望Devise測試助手可用於所有測試,則必須在類聲明中將allesklar提到的包含在test_helper.rb
的底部,如下所示:
class ActionController::TestCase
include Devise::TestHelpers
end
更新:01.25.2017
... rails 5發布棄用警告並要求您使用......
Devise::Test::ControllerHelpers
我對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 。
從https://github.com/plataformatec/devise逐字引用:
如果您正在使用RSpec,則可以將以下內容放在名為
spec/support/devise.rb
的文件中:
RSpec.configure do |config|
config.include Devise::TestHelpers, :type => :controller
end
您現在可以在RSpec測試中使用sign_in
和sign_out
。
除了test_helpers.rb中的代碼之外,我在controller_test的頂部添加了它,它對我有用:
require 'test_helper'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.