Ruby on rails 如何包含rspec的支持文件
我正在构建rails 4应用程序。我创建了一个支持文件来模拟登录。这是文件 spec/support/spec\u test\u helper.rb spec_helper.rb 控制器规格 支持文件给出了一个未定义的方法错误。这是错误消息的一部分:Ruby on rails 如何包含rspec的支持文件,ruby-on-rails,rspec,rspec-rails,Ruby On Rails,Rspec,Rspec Rails,我正在构建rails 4应用程序。我创建了一个支持文件来模拟登录。这是文件 spec/support/spec\u test\u helper.rb spec_helper.rb 控制器规格 支持文件给出了一个未定义的方法错误。这是错误消息的一部分: spec/controllers/books_controller_spec.rb:27:in `block in <top (required)>': undefined method `login' for #<Class:0
spec/controllers/books_controller_spec.rb:27:in `block in <top (required)>': undefined method `login' for #<Class:0x007f9f83193438> (NoMethodError)
spec/controllers/books_controller_spec.rb:27:in'block-in':未定义的#方法'login'(NoMethodError)
我在测试CanCan。我知道测试CanCan的正确方法是测试该功能,但这已经完成了。将登录(用户)
调用放在之前的或it
块中,而不是直接放在描述
块中:
let(:user) do
Fabricate(:user) do
role { Role.find_by_account_type("user") }
end
end
before do
login(user)
end
我在spec\u helper.rb
中添加了这一行,它在第三个Rails中工作
Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f}
除了@gotva提供的答案,可能还有另一个(更漂亮的)解决方案。它稍微详细一些,但在Rails 3和Rails 4中都可以使用:
Dir[File.expand_path(File.join(File.dirname(__FILE__),'support','**','*.rb'))].each {|f| require f}
rspec dir下可以有两个文件:rails\u helper.rb
和spec\u helper.rb
。如果您想提供对rails相关类的支持,应该使用rails\u helper
告诉rails在'spec/support'
目录下加载模块
Dir[Rails.root.join('spec/support/**/*.rb')].each { |f| require f }
要声明共享模块,您需要在配置块中使用它
RSpec.configure do |config|
...
config.include <YourModuleName>::<YourClassName>, :type => :controller
...
end
RSpec.configure do|config|
...
config.include:,:type=>:controller
...
结束
但是,如果您的类根本不需要rails,您可以在spec\u helper
下加载它,这将不会加载rails来运行测试。
请参阅并了解更多信息。请包含准确的错误消息。因此,请注意@Ash的答案-您确实应该在其中创建记录并调用方法/before/let…是的!非常感谢,这就是问题所在。
Dir[File.expand_path(File.join(File.dirname(__FILE__),'support','**','*.rb'))].each {|f| require f}
Dir[Rails.root.join('spec/support/**/*.rb')].each { |f| require f }
RSpec.configure do |config|
...
config.include <YourModuleName>::<YourClassName>, :type => :controller
...
end