Rspec not loading support files
我有这个文件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| # support/auth_macros.rb
module AuthMacros
def login_user
before(:each) do
@request.env["devise.mapping"] = Devise.mappings[:user]
@logged_in_user = FactoryGirl.create(:user, username:"logged_in")
sign_in @logged_in_user
end
end
def logout_user
before(:each) do
sign_out @logged_in_user
end
end
end |
在我的spec_helper文件中,有以下行:
1
| Dir[Rails.root.join("spec/support/**/*.rb")].each { |f| require f } |
但是当我运行rspec时,出现类似以下的错误:
1
| undefined local variable or method `login_user' for RSpec::ExampleGroups::PostsController::POSTCreate::WhenSignedIn:Class |
相关的函数位于support/auth_macros中,我假设它将由我的spec_helper中的require语句拾取。
有什么想法吗?
- support/auth_macros.rb-扩展很重要
-
是的,这是一个rb文件。
-
您也可以向我们显示此文件吗?
您需要该文件,但是该方法package在模块中。您需要删除package模块或将其包含在组测试中。
更新:
特定于100%:require加载文件,不执行其他任何操作。需要文件后,模块已创建,但不包括在内。您需要将其包含在:include AuthMacros
- 在我的小组测试中,我require 'spec_helper',这又需要该模块。不幸的是,即使当我直接要求'support / auth_macros'`时,该错误仍然存??在。
-
@timothycommoner-更新了问题,使它更清晰。
-
啊,我明白了。似乎已通过配置config.extend ControllerMacros, :type => :controller对其进行了扩展。我继续删除该行,然后将功能从其模块中删除。我遇到的错误仍然存??在,但是新的错误出现在我的控制器规格中,例如undefined method 'get'和undefined method 'post'。默认情况下,控制器规范可以访问这些方法,对吗?因此,这里可能存在一个更深层次的问题。有什么想法,还是我应该打开一个新问题?
-
看起来问题在于rspec不能将这些规范标识为控制器规范,因此它没有加载必要的功能-包括ControllerMacros,后者又加载了其他宏,例如AuthMacros。遇到此问题的其他任何人都可以在此处找到更多信息。
-
特别是,升级到Rspec 3.0会导致此问题。尽管您可以在spec_helper中使用以下命令覆盖此行为,但它不再从路径中推断规格类型:config.infer_spec_type_from_file_location!