3

minitest で練習するために小さなアプリを作成しました。スタックは次のようにバージョン管理されます。

  • レール 4.1.4
  • ルビー 2.1.2p95
  • 工夫 3.2.4
  • devise_token_auth 0.1.25
  • レール-API 0.2.1

アプリは rails-api の指示に従ってゼロから生成されており、クライアント側からはすべてが期待どおりに機能していることがわかります。

私が直面している困難は、認証を処理する必要があるコントローラーのテストです。

この種のテストのインスピレーションは次のとおりです。

https://github.com/lynndylanhurley/devise_token_auth/blob/master/test/controllers/demo_controller_test.rb

テスト コードはhttp://pastebin.com/iPVk9Tzqにあります。

テスト スイートを実行すると、次のエラーが返されます。

PostsControllerTest#test_get_index_is_successful_if_logged_in:
NoMethodError: undefined method `session_serializer' for nil:NilClass
  test/controllers/posts_controller_test.rb:24:in `block in <class:PostsControllerTest>'

ネットでいろいろ検索してみましたが、この問題を解決する方法がわかりませんでした。

アプリケーションがステートレス API として実装されているため、どこにもセッションが保存されていないためにエラーが発生することを理解しています。

明らかに、「request.headers.merge! ...」行をコメントアウトすると、エラーは消え、テストは 401 の応答で失敗します (ユーザーがログインしていない場合)。

どんな助け/提案も大歓迎です!

よろしく

4

1 に答える 1

4

コントローラーのテストクラスに Devise::TestHelpers を含めるのを単に忘れていたことが判明しました...

ごめん :/

于 2014-08-22T16:27:19.590 に答える