Заглушка на активной модели LDAP работает только один раз - PullRequest
1 голос
/ 09 марта 2012

Я использую RSpec для тестирования моего приложения RoR и использую ActiveLDAP для внутреннего использования. Сейчас я пишу спецификации для контроллера, который создает новые объекты через ActiveLDAP, и поэтому я написал несколько строк, подобных этой, чтобы представить поведение при создании записи:

before(:each) do
  @sample_attributes = {"a" => "b", "c" => "d"}
  @cu = Cloud::User.new
  @cu.stub(:save).and_return false
  @cu.stub(:attributes=).with(@sample_attributes).and_return @sample_attributes
  Cloud::User.stub(:new).and_return @cu
end

Цель этого состоит в том, чтобы дать возможность рассчитывать на модель @cu, чтобы гарантировать выполнение определенных команд для нее. Вот так:

it "should save the new cloud user" do
  @cu.should_receive(:save).and_return false
  post 'create', :cloud_user => @sample_attributes
end

it "should set the attributes of the new cloud user" do
  @cu.should_receive(:attributes=).with(@sample_attributes).and_return @sample_attributes
  post 'create', :cloud_user => @sample_attributes
end

Довольно просто, верно? Ну, вот в чем проблема. Первый успешен, но второй всегда выдает эту ошибку:

private method `new' called for #<Class:0x007f8bcad775c8>

Когда он запускает эту строку в контроллере:

@cloud_user = Cloud::User.new

Нет, это не частный метод. И ТОЧНАЯ ЖЕ ЛИНИИ прекрасно работает в первом тесте. Кроме того, это не является чем-то присущим индивидуальному тесту. Если я переверну порядок двух тестов, то проверка набора атрибутов будет успешной, а сохранение пользовательского теста завершится неудачно. В основном, это успешно выполняется в зависимости от того, кто запускается первым, и не в зависимости от того, кто запускается вторым.

ПОЧЕМУ?

У кого-нибудь есть идеи? Я должен думать, что это как-то связано с тем, как работает команда-заглушка с ActiveLDAP, но я не знаю. Кажется, так просто!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...