Тесты Rspec не проходят в пространстве имен - PullRequest
1 голос
/ 20 декабря 2010

Я только что преобразовал некоторые существующие тесты rails в rspec, и теперь тесты, которые находятся в пространстве имен, терпят неудачу.

Т.е. в приведенном ниже примере спецификация AccountController проходит, в то время как ChildrenController завершается ошибкой со следующей ошибкой:

in `load_missing_constant': Expected /.../app/controllers/admin/children_controller.rb to define Admin::ChildrenController (LoadError)

app / controllers / account_controller.rb

class AccountController < ApplicationController

spec / controllers / account_controller_spec.rb

require 'spec_helper'

describe AccountController do
  #...
end

app / controllers / admin / children_controllerrb

class Admin::ChildrenController < ApplicationController

spec / controllers / admin / children_controller_spec.rb

require 'spec_helper'

describe Admin::ChildrenController do  
   include ::ControllerHelper 
   #... 
end

Я использую

  • ruby-1.9.2-p0
  • Rails 3.0.3
  • rspec 2.3.0

Я пытался поиграть с определениями пространства имен, но пока не получилось - есть идеи ???

Ответы [ 5 ]

3 голосов
/ 22 июня 2012

У меня была такая же проблема, и я не хотел помещать тесты в более низкий каталог. В моем случае это был Spork, который все испортил.

Чтобы быть точным:

Spork.each_run do
  ActiveSupport::Dependencies.clear
end

Я установил проверку, если spork работает, иначе вы должны игнорировать эту строку.

Spork.each_run do
  if /spork/i =~ $0 || RSpec.configuration.drb?
    ActiveSupport::Dependencies.clear
  end
end
3 голосов
/ 19 июня 2012

Другое решение:

, определяя класс как строку, он будет загружаться нормально:

# children_controller_spec.rb
require 'spec_helper'
describe "Admin::ChildrenController" do  
  # -something-
end

это будет работать в каталоге spec / controller / admin

edit: не работает в 2.10.x

2 голосов
/ 20 марта 2014

У меня была такая же проблема, и я решил ее следующим образом:

До:

# app/controllers/admin/awards_controller.rb:
class Admin::AwardsController < ApplicationController

# spec/controllers/admin/awards_controller_spec.rb:
require 'spec_helper'

describe Admin::AwardsController do

Запуск rspec дал мне:

/Users/andy/.rvm/gems/ruby-1.9.3-p385@xxxx/gems/activesupport-3.2.11/lib/active_support/dependencies.rb:503:in `load_missing_constant': Expected /Volumes/untitled/xxxx/app/controllers/admin/awards_controller.rb to define Admin::AwardsController (LoadError)
(stacktrace...)

После того, как:

# spec/controllers/admin/awards_controller_spec.rb:
require 'spec_helper'
load "#{Rails.root}/app/controllers/admin/awards_controller.rb"

describe Admin::AwardsController do
1 голос
/ 21 декабря 2010

Публикация ответа на случай, если кто-то споткнется об этом в другой раз!

В конце я исправил его, сгладив спецификации следующим образом:

app>controllers>admin>children_controller.rb
class Admin::ChildrenController < ApplicationController

spec>controllers>children_controller_spec.rb
require 'spec_helper'
describe Admin::ChildrenController do  
0 голосов
/ 20 июня 2011

Вы можете держать контроллер в отдельной папке, но вы должны использовать требуется File.dirname ( FILE ) + '/../../spec_helper' вместо того, чтобы просто потребовать 'spec_helper'

...