Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何包含rspec的支持文件_Ruby On Rails_Rspec_Rspec Rails - Fatal编程技术网

Ruby on rails 如何包含rspec的支持文件

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

我正在构建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: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