RSpec 在与设计映射混淆之前
RSpec before confusion with devise mappings
所以我需要为我的测试设置一个设计映射才能正常工作。根据 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 并将它放在不同的地方,但无论我把它放在哪里,我都会收到错误消息。
谢谢!
您的方法 set_devise_mapping 在 describe 中但不在 it
而不是(在 it 块中使用时这项工作)
config.include Controllers::DeviseHelpers, type: :controller
必须(在 describe 块中使用时这项工作)
config.extend Controllers::DeviseHelpers, type: :controller
所以我需要为我的测试设置一个设计映射才能正常工作。根据 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 并将它放在不同的地方,但无论我把它放在哪里,我都会收到错误消息。
谢谢!
您的方法 set_devise_mapping 在 describe 中但不在 it
而不是(在 it 块中使用时这项工作)
config.include Controllers::DeviseHelpers, type: :controller
必须(在 describe 块中使用时这项工作)
config.extend Controllers::DeviseHelpers, type: :controller