2014-11-27 4 views
2

두 가지 사양이 있습니다. 하나는 모든 기본값을 사용하여 작성되었습니다 (저는 셀렌이 기본값이라고 생각합니까?) 그리고 다른 하나는 웹킷을 사용합니다. 그들은 정확히 동일하지만, 하나는 위의 click_link 'Add Payment Scheme'에서 발생, 다른 하나는 사양하지사양이 왜 실패합니까?

사양

let(:admin) {create(:user, :admin)} 
    let(:programme) { create(:programme, :full_payment_scheme) } 

    before(:each) do 
    login_as(admin) 
    visit edit_programme_path(programme) 
    end 

    scenario 'adding a payment_scheme', js: true do 
     new_payment_scheme = create(:payment_scheme) 
     visit edit_programme_path(programme) 
     click_link 'Add Payment Scheme' 
     select new_payment_scheme.name, from: all('select[id*="programme_programme_payment_schemes_attributes"][id*="payment_scheme_id"]').last[:id] 
     fill_in all('input[id*="programme_programme_payment_schemes_attributes"][id*="markup"]').last[:id], with: 50 
     fill_in all('input[id*="programme_payment_scheme_allocations_attributes"][id*="interval_weeks"]').last[:id], with: 10 
     fill_in all('input[id*="programme_payment_scheme_allocations_attributes"][id*="allocation"]').last[:id], with: 100 

     expect {click_button "Save"}.to change{ProgrammePaymentScheme.count}.by(1) 
    end 

자바 스크립트를하지 못합니다. 노트는 ID가 이상하게 보입니다. 그러나 중첩 된 속성을 사용하고 페이지에 동적으로 컨트롤을 추가하면 ID에 임의의 부분이 있습니다 (일반적으로 다음과 같이 계산됩니다). 날짜). 그래서 나는 직접 신분증을 사용할 수 없다. 나는 펑키 CSS 선택기를 사용해야합니다.

Programme edit page 
    editing the payment_scheme 
    adding a payment_scheme (FAILED - 1) 

Failures: 

    1) Programme edit page editing the payment_scheme adding a payment_scheme 
    Failure/Error: expect {click_button "Save"}.to change{ProgrammePaymentScheme.count}.by(1) 
     expected result to have changed by 1, but was changed by 0 
    # ./spec/features/programmes/programme_edit_spec.rb:57:in `block (3 levels) in <top (required)>' 
    # -e:1:in `<main>' 

Finished in 3.8 seconds (files took 0.53482 seconds to load) 
1 example, 1 failure 

Failed examples: 

rspec ./spec/features/programmes/programme_edit_spec.rb:48 # Programme edit page editing the payment_scheme adding a payment_scheme 

Top 1 slowest examples (3.48 seconds, 91.5% of total time): 
    Programme edit page editing the payment_scheme adding a payment_scheme 
    3.48 seconds ./spec/features/programmes/programme_edit_spec.rb:48 

내가 저장하고 Launchy에를 사용하여 페이지를 열 웹킷의 기본에 대한

결과

Programme edit page 
    editing the payment_scheme 
    adding a payment_scheme 

Finished in 8.57 seconds (files took 1.25 seconds to load) 
1 example, 0 failures 

Top 1 slowest examples (7.6 seconds, 88.7% of total time): 
    Programme edit page editing the payment_scheme adding a payment_scheme 
    7.6 seconds ./spec/features/programmes/programme_edit_spec.rb:48 
[email protected] ~/Sites/phoenix ±20487304354485⚡ » rspec spec/features/programmes/programme_edit_spec.rb 

결과, 나는 몇 가지 이유가 지불 작성 아니에요 볼 계획 필드. 이 기능은 셀레늄을 사용하여 잘 작동합니다. 나는 시험을 다시 시도했지만 거기에는 운이 없다.

나는 그것이 모두라고 생각합니다. 모든 입력을 부탁드립니다.

답변

1

그것은

가장 확실한 당신이 카피 바라를 사용하고 있기 때문에 비동기 문제가 될 수 있다는 것입니다 몇 가지있을 수 있습니다. Capybara/테스트 스레드는 브라우저에 단추를 클릭하라는 메시지를 표시 한 다음 계속합니다. 다른 일이 일어날 때까지 기다리지 않기 때문에 브라우저는 여전히 JS에서 작업하고 예를 들어 애플리케이션에 요청을 다시 보낼 수 있습니다. 수면을 취하거나 방아쇠를 당겨이 문제를 해결할 수 있습니다.

버튼 클릭에 대한 JS 또는 JS 요청 처리 용 코드가 있어야 할 일을 수행하고있을 수도 있습니다.

+0

또한 콘솔/프리젠 테이션에서 테스트를 실행하는 것이 좋습니다. 정말 유용합니다. 시작 세션을 시작하고 코드가하는 것과 같은 방식으로 브라우저를 열고 셀레늄 (또는 사용하는 모든 것)을 동적으로 스크립트합니다. –

+0

감사합니다. 나는 콘솔을 통해 셀레늄 스크립트를 시도 할 것이다. 그렇게 생각하지 마십시오. –

관련 문제