【问题标题】:RSpec before confusion with devise mappings与设计映射混淆之前的 RSpec
【发布时间】:2015-02-18 04:58:27
【问题描述】:

所以我需要为我的测试设置一个设计映射才能正常工作。根据https://github.com/plataformatec/devise/wiki/How-To:-Test-controllers-with-Rails-3-and-4-%28and-RSpec%29,我添加了

describe Api::SessionsController do
  before(:each) do
    @request.env["devise.mapping"] = Devise.mappings[:admin]
  end
  ...
end

这很好用。但是,由于我将在多个规范中重复使用它,我想将它放在支持文件夹中的模块中。因此:

support/devise_helper.rb

module Controllers
  module DeviseHelpers
    def set_devise_mapping
      before(:each) do
        @request.env["devise.mapping"] = Devise.mappings[:api_user]
      end
    end
  end
end

我通过以下方式包含模块:

RSpec.configure do |config|
  config.include Controllers::DeviseHelpers, type: :controller
end

然后在规范中:

describe Api::SessionsController do
  set_devise_mapping
end

我收到以下错误:

ruby/gems/2.2.0/gems/rspec-core-3.2.0/lib/rspec/core/example_group.rb:626:in `method_missing':
 `set_devise_mapping` is not available on an example group (e.g. a `describe` or `context` block).
 It is only available from within individual examples (e.g. `it` blocks) or from constructs that run in the scope of an example (e.g. `before`, `let`, etc). (RSpec::Core::ExampleGroup::WrongScopeError)

为什么我会得到这个?这就是上面链接的 github 示例所做的。它也可以在没有该方法的情况下工作。我尝试使用 :context 并将其放在不同的位置,但无论放在哪里都会出错。

谢谢!

【问题讨论】:

    标签: ruby-on-rails ruby rspec devise


    【解决方案1】:

    你的方法set_devise_mappingdescribe而不是it

    而不是(在 it 块中使用此工作)

    config.include Controllers::DeviseHelpers,类型::controller

    必须(在 describe 块中使用时有效)

    config.extend Controllers::DeviseHelpers,类型::controller

    【讨论】:

    • 这会导致错误:未初始化的常量控制器。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-30
    相关资源
    最近更新 更多