Rails4 rails-api test:通过头令牌测试auth时未定义的session_serializer

时间:2014-08-21 14:38:57

标签: ruby-on-rails api devise minitest rails-api

我写了一个小应用程序,以便用minitest练习。堆栈版本为 如下:

  • Rails 4.1.4
  • ruby​​ 2.1.2p95
  • 设计3.2.4
  • devise_token_auth 0.1.25
  • rails-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(当用户未登录时应该如此)。

任何帮助/建议都受到广泛赞赏!

此致

1 个答案:

答案 0 :(得分:4)

事实证明我只是忘了在我的控制器测试类中包含Devise :: TestHelpers ......

抱歉:/