2013-11-15 2 views
0

Я пытаюсь собрать тест одного запуска в RSpec:Rspec предотвратить переключение контекста между ним блоками

feature "Happy Path", js:true do 

    before(:all) do 
    @user = create(:user) 
    @object = create(:object, account: @object.account) 
    sign_in @user 
    end 

    describe "test" do 
    context "test" do 
     include_examples "it_will_expand_the_menu" 

     include_examples "it_will_navigate_to_the_object" do 
     let(:object) {@object.name} 
     end 
    end 
    end 

и общие примеры определены:

shared_examples "it_will_expand_the_menu" do 
    it "expands menu" do 
    ... 
    ... 
    end 
end 

shared_examples "it_will_navigate_to_the_object" do 
    it "fills in the country" do 
    click_on object 
    end 
end 

Первый тест проходит с меню однако, между двумя тестами браузер обновляется и переходит к пустой HTML-странице до того, как ошибки RSpec устраняются с

Failure/Error: click_on object 
    Capybara::ElementNotFound: 
     Unable to find link or button "Bicycle" 

Что происходит? Почему RSpec восстанавливает контекст, даже если у меня сложилось впечатление, что include_examples поддерживает текущий контекст? Как я могу обойти это?

+0

Каждый тест работает изолированно; вы делаете что-то во втором тесте, которое должно быть непрерывным с последнего шага? – kiddorails

+0

да второй тест имеет смысл только из состояния в конце первого шага. Есть ли способ сделать тесты непрерывными? –

+0

В идеале ваши тесты должны быть в состоянии работать в любом порядке. Если вас беспокоит избыточность, вы можете сушить код, который вы повторяете, в вспомогательную функцию. –

ответ

0

Оказалось, что это проблема Капибары.

Капибара :: Session имеет следующий метод, определенный:

def reset! 
     driver.reset! if @touched 
     @touched = false 
     raise @server.error if Capybara.raise_server_errors and @server and @server.error 
    ensure 
     @server.reset_error! if @server 
    end 
    alias_method :cleanup!, :reset! 
    alias_method :reset_session!, :reset! 

с spec_helper делает @session.reset_session! после каждого теста

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

module Capybara 
    class Session 
    def reset! 
     return nil 
    end 
    end 
end 

к В верхней части моего файла конфигурации это поведение можно предотвратить.

Смежные вопросы