簡體   English   中英

使用Devise在Rails中進行功能測試

[英]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_insign_out

除了test_helpers.rb中的代碼之外,我在controller_test的頂部添加了它,它對我有用:

require 'test_helper'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM