Можно ли использовать раньше: все с капибарой? - PullRequest
6 голосов
/ 20 марта 2012

У меня есть блок описания, подобный этому:

describe "Documents" do
  subject { page }
  let (:course) { FactoryGirl.create(:course) }
  describe "new" do
    before do
      visit new_course_document_path(course)
      fill_in "Name", with: "TestDocument"
      attach_file "Original document", "#{Rails.root}/spec/fixtures/03_GUI_concurrency.pdf"
    end
    it { should have_selector('title', text:"Upload document")}
    it { should have_selector('h1', text:"Upload document")}
    describe "when clicking upload" do
      before { click_button "Upload Document" }
      it "should have the document name" do
        subject.should have_selector('p', text: "TestDocument")
      end

      it "should have 22 pages" do
        subject.should have_selector('.page', count: 22)
      end

      describe "when visiting the course page" do
        before { visit course_path(course) }
        it { should have_selector 'li', text: "TestDocument"}
      end
    end
  end

Тест довольно дорогой, так как проделана значительная работа по сохранению документа. Это хорошо, но это даже медленнее, так как он делает эту загрузку 3 раза. Итак, очевидная вещь, которую нужно сделать, - это превратить блоки before в before: все блоки - но когда я это делаю, правильно выполняется только первый блок it {}, а последующие выполняются на пустой странице, поэтому они терпят неудачу.

Это раньше: все блоки должны работать с капибарой, и если да, то что я тут не так делаю?

1 Ответ

5 голосов
/ 20 марта 2012

Капибара сбрасывает сессию после каждого запуска примера, поэтому, когда вы переместили visit new_course_document_path(course) в before (:all) блок, вам нечего было посетить, начиная со второго примера.

Я бы порекомендовалзапускать только те тесты, над которыми вы работаете.Этого можно достичь с помощью опции RSpec tag или guard-rspec , и это сэкономит вам МНОГО времени.

...