使用Devise在Rails中进行function测试

经过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只是在这个页面中给出了function测试指针和帮助器: 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' 
Interesting Posts