2014-04-08 4 views
3

큰 Rails/AngularJS 앱에 대한 일부 통합 테스트에 Capybara 2.x를 사용하고 있습니다. 테스트를 통해 잠깐 만요.수면을 사용하지 않고 아약스를 기다리는 capybara

내 시험 :

describe "#delete", js: true do 
    it "deletes a costing" do 
    costing = Costing.make! 

    visit "/api#/costings" 
    page.should have_content("General") 

    click_link "Delete"  # Automatically skips the confirm box when in capybara 

    sleep 0.4 
    page.should_not have_content("General") 
    end 
end 

이 업데이트 순식간 소요 NG 테이블을 사용하는 테스트 코드는, 수면없이 실패합니다. Capybara는 이것을 위해 wait_until 메소드를 사용했으나 제거되었습니다. 이 웹 사이트 : http://www.elabs.se/blog/53-why-wait_until-was-removed-from-capybara을 발견했지만이 문제에 대해 권장되는 대안을 얻을 수 없습니다.

다음은 테스트 할 코드입니다.

# -------------------------------------------------------------------------------- 
    # Delete 
    # -------------------------------------------------------------------------------- 
    $scope.destroy = (id) -> 
    Costing.delete (id: id), (response) -> # Success 
     $scope.tableParams.reload() 
     flash("notice", "Costing deleted", 2000) 

은 NG 테이블이 코드를입니다 (tableParams 변수)를 업데이트

$scope.tableParams = new ngTableParams({ 
    page: 1, 
    count: 10, 
    sorting: {name: 'asc'} 
    },{ 
    total: 0, 

    getData: ($defer, params) -> 
     Costing.query {}, (data) -> 
     # Once successfully returned from the server with my data process it. 
     params.total(data.length) 

     # Filter 
     filteredData = (if params.filter then $filter('filter')(data, params.filter()) else data) 

     # Sort 
     orderedData = (if params.sorting then $filter('orderBy')(filteredData, params.orderBy()) else data) 

     # Paginate 
     $defer.resolve(orderedData.slice((params.page() - 1) * params.count(), params.page() * params.count())) 
    }) 

답변

0

이 실패하면 Capybara.default_wait_time 최대 3 초 또는 4

을 해주 시도의 변화 시도 spec을 사용하여 항목이 페이지에서 제거되었는지 확인하기 전에 플래시 공지 메시지를 찾습니다. 이 정확하기 때문에 제거 설명 -

describe "#delete", js: true do 
    it "deletes a costing" do 
    costing = Costing.make! 

    visit "/api#/costings" 
    page.should have_content("General") 

    click_link "Delete" 

    page.should have_content("Costing deleted") 
    page.should_not have_content("General") 
    end 
end 

편집 (플래시 메시지를 가정하는 HTML 본문에서 렌더링됩니다).

+0

여전히 should_not 테스트가 중단되면 플래시 메시지 테스트를 통과합니다. 또한 기본 대기 시간을 5 초로 늘리려고했지만 도움이되지 않았습니다. 나는 아직도 잠을 자야 해. – map7