Столкновение модели Rails с RSpec - PullRequest
0 голосов
/ 31 марта 2011

Я пытаюсь вернуть RSpec-тесты моего приложения Rails к работе.Насколько я могу судить, единственная реальная разница между тем, когда они были зелеными и сейчас, заключается в том, что я сейчас использую ruby ​​1.9, тогда как раньше они проходили с ruby ​​1.8.7.

У меня есть модель

class Change < ActiveRecord::Base
...
end

которая использует спецификацию:

describe ChangeObserver do
  let (:c) { Change.new(:comment => "Test", :originator => "x.y")}
  it "finds affected modules for a change" do
    c.should_receive(:affected).and_return([])
    c.save
  end
end

(да, мне нужен экземпляр Change для тестирования наблюдателя).

Эти спецификации не работают с:

1) ChangeObserver finds affected modules for a change
   Failure/Error: c.save
   NoMethodError:
     undefined method `save' for #<RSpec::Matchers::Change:0x3c8e5f0>

Так что, очевидно, мой класс Change конфликтует с [RSpec::Matchers::Change][1], но это не всегда происходило (я уверен, что он работал с ruby ​​1.8.7).Есть ли что-то отличное от того, как ruby ​​загружает модули в 1.9?Как я могу require мой собственный Change класс (примечание: он не находится внутри модуля, поэтому я не знаю, как его квалифицировать).

1 Ответ

2 голосов
/ 31 марта 2011

Используйте ::Change для обозначения пространства имен верхнего уровня, поскольку класс Change RSpec находится в модуле RSpec::Matchers. Как так:

describe ChangeObserver do
  let (:c) { ::Change.new(:comment => "Test", :originator => "x.y")}
  it "finds affected modules for a change" do
    c.should_receive(:affected).and_return([])
    c.save
  end
end
...