19

经过 3 年的拖延,今天是我开始测试我的 Rails 应用程序的日子。我的第一步是修复我的 Rails 3 beta4 应用程序中失败的测试。

我最后 3 次失败的测试与设计 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'

设计只是在此页面中提供功能测试指针和帮助程序: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 提到的包含在test_helper.rb类声明的底部,如下所示:

class ActionController::TestCase
  include Devise::TestHelpers
end

更新:2017 年 1 月 25 日

... rails 5 发布弃用警告并要求您使用 ...

Devise::Test::ControllerHelpers

于 2011-08-03T20:45:04.173 回答
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

于 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_in和。sign_out

于 2013-11-14T04:16:05.983 回答
0

除了 test_helpers.rb 中的代码之外,我还在 controller_test 的顶部添加了它,它对我有用:

require 'test_helper'
于 2013-06-12T18:33:54.743 回答