Переменные rspec в разных контекстах / областях - PullRequest
1 голос
/ 22 июня 2011

Я пытаюсь сделать некоторые вещи с помощью rspec и не могу получить доступ к нужным мне переменным в тех местах, где они мне нужны.Например:

describe "some things" do
  it "should have things in App" do
    App.things.should_not be_nil #no problems here
    # puts App.things.count
    # => 10
  end

 # puts App.things.count
 # => 0
 App.things.each do |thing|
   #this doesn't work at all as App.things is empty 
   it "#{thing.title} should have an account number" do
      thing.acc_no.should_not be_nil  
   end
 end

Я полагаю, это происходит из-за времени, когда вызываются разные блоки.Или, может быть, я полностью упускаю суть.

Мне нужно перебрать «вещи» и сделать утверждение о каждом, но я не могу этого сделать, потому что у вещей нет элементов в контекстеблока описаний, только внутри блока it.

Любая помощь?

Ответы [ 2 ]

0 голосов
/ 04 августа 2011

Не знаю, помогает ли это, но у меня была похожая проблема. Причина, по которой я хотел перебрать блок «it», заключалась в том, что сообщения об ошибках rspec содержали название вещи, над которой я перебирал.

В моем случае это был набор идентификаторов, которые могут содержать или не содержать тег div в зависимости от состояния различных объектов на странице.

Так я и сделал:

%w{preliminary_project_proposal final_project_proposal progress_report preliminary_abstract final_abstract preliminary_presentation final_presentation}.each do |id|
  it "should not show a late message for #{id}" do
    within "##{id}" do
      page.should_not have_css('.late_assignment')          
    end            
  end        
end

Это сработало нормально. Как вы указали, я не мог перенести присвоение массива в переменную или метод, что означало, что он появился в нескольких местах, что было не очень красиво.

0 голосов
/ 22 июня 2011

Кажется, вы делаете это неправильно: зачем проверять каждое значение коллекции?

  • создайте некоторые приборы и проверьте, что приложение имеет правильное количество созданных объектов

  • использовать один из созданных приборов для тестирования, который имеет правильные значения, который выполняет проверки и т.д ...

по крайней мере, вы можете использовать общие примеры rspec для повторения общих тестов:

http://blog.davidchelimsky.net/2010/11/07/specifying-mixins-with-shared-example-groups-in-rspec-2/

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