19

3年間の先延ばしの後、今日はRailsアプリのテストを開始する日です。私の最初のステップは、Rails3beta4アプリで失敗したテストを修正することです。

私の最後の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 )で機能テストのポインターとヘルパーを提供しているだけですが、これをアプリケーションに組み込む方法がわかりません。

このテスト初心者に、これらのヘルパーの使用方法に関する詳細な手順を教えていただけますか?

4

5 に答える 5

51

少し時間がかかりましたが、道を見つけました。これは、同じ点で立ち往生している人のためのものです。

moderation_controller_test.rb の上部、クラス宣言の下に、次の行を追加します。

include Devise::TestHelpers

ユーザー フィクスチャに 2 つのレコードがあり、各テスト内にこの行を追加しました。ユーザーはアクションの実行を承認される必要があります。

sign_in User.first

もちろん、やり方さえわかれば簡単です。

于 2010-07-07T05:11:02.533 に答える
19

Devise テスト ヘルパーをすべてのテストで使用できるようにする場合は、 allesklar で言及されている include をtest_helper.rbクラス宣言の最後で次のように囲む必要があります。

class ActionController::TestCase
  include Devise::TestHelpers
end

更新: 01.25.2017

... Rails 5 は非推奨警告を投稿し、使用を求めます ...

Devise::Test::ControllerHelpers

于 2011-08-03T20:45:04.173 に答える
7

私は Rails に比較的慣れていないので、他の初心者には明らかではないかもしれないいくつかのことを追加したいと思います。

ユーザー フィクスチャに関しては、1 つ定義する必要がありましたが、これを機能させるには空のままにしておきます。

# in users.yml    
joe: {}

devisesign_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を参照してください。

于 2010-11-10T17:18:22.283 に答える
1

https://github.com/plataformatec/deviseから逐語的に引用:

RSpec を使用している場合は、次の名前のファイル内に配置できますspec/support/devise.rb

RSpec.configure do |config|

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

end

RSpec テストでsign_inandを使用できるようになりました。sign_out

于 2013-11-14T04:16:05.983 に答える
0

test_helpers.rb のコードに加えて、これを controller_test の先頭に追加すると、うまくいきました。

require 'test_helper'
于 2013-06-12T18:33:54.743 に答える