2014-09-24 2 views
1

페이지 개체 패턴을 사용하도록 내 통합 사양을 리팩토링하고 있습니다. 데이터베이스가없는 JS 애플리케이션을 테스트하고있다. 나는 poltergest를 사용하고있다.페이지 모델이있는 카피 바라의 속도가 매우 느림

선택기를 페이지 개체로 추상화하면 테스트가 상당히 느려집니다.

require 'benchmark' 

class HostsPage 
    include Capybara::DSL 

    def has_search_results? 
    has_css?('.results') 
    end 
end 

feature 'blaa blaa' do 
    let(:host) { HostsPage.new } 

    before do 
    visit('/') 
    click_link 'Query Hosts' 
    end 

    scenario 'User does something' do 
    puts Benchmark.measure { host.has_search_results? } 
    puts Benchmark.measure { have_css('.results') } 

    skip 
    end 
end 

이 출력 :

0.030000 0.010000 0.040000 ( 2.051050) 
0.000000 0.000000 0.000000 ( 0.000008) 

하면 알 수 있듯이, 첫 번째 결과는 두 번째 및 시험보다 훨씬 느리다는 기본적 페이지 객체 추상화 제외하고 동일하다.

내 spec_helper은 다음과 같습니다

require 'capybara/rspec' 
require 'capybara/poltergeist' 

Dir[File.expand_path(File.join(File.dirname(__FILE__), 'support', '**', '*.rb'))].each { |f| require f } 

RSpec.configure do |config| 
    config.order = :random 
    config.warnings = false 

    Capybara.default_driver = :poltergeist 

    Capybara.app = App.new # this points to a basic Sinatra app that serves index.html 
end 

가 어떻게이 아래로 추적 것? 그 원인은 무엇입니까?

답변

1

그것은 페이지 모델과는 아무 상관이 없습니다 :

puts Benchmark.measure { has_css?('.results') } 
puts Benchmark.measure { have_css('.results') } 

반환 그래서

0.030000 0.010000 0.040000 ( 2.005658) 
0.000000 0.000000 0.000000 ( 0.000008) 

의 has_css을? have_css 메소드는 꽤 다릅니다.

has_css?의 경우, Capybara는 시간 초과가 만료되기를 기다리고 있습니다.