今天拖延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一些关于如何使用这些助手的详细说明吗?
答案 0 :(得分:51)
我花了一段时间,但我找到了方法。这是适合任何坚持同一点的人:
在moderation_controller_test.rb的顶部,在类声明下方,添加以下行:
include Devise::TestHelpers
我的用户夹具中有2条记录,我在每个测试中添加了这一行,用户必须被授权执行操作。
sign_in User.first
当你知道怎么做的时候,当然很简单。
答案 1 :(得分:19)
如果您希望Devise测试助手可用于所有测试,则必须在test_helper.rb
的底部将allesklar提到的包含在这样的类声明中:
class ActionController::TestCase
include Devise::TestHelpers
end
更新:01.25.2017
... rails 5发布弃权警告&请你用......
Devise::Test::ControllerHelpers
答案 2 :(得分:7)
我对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。
答案 3 :(得分:1)
从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
。
答案 4 :(得分:0)
除了test_helpers.rb中的代码之外,我在controller_test的顶部添加了它,它对我有用:
require 'test_helper'