2014-07-11 3 views
2

많은 유사한 텍스트 상자가있는 페이지가 있는데, 모두 JavaScript로 변경 리스너를 설치했습니다 (Coffeescript를 썼음에도 불구하고).테스트에서 내 (자바 스크립트) 변경 이벤트가 실행되지 않는 이유는 무엇입니까?

예 HTML :

<td class="team" data-node="64" id="team_64"> 
    <label for="bracket_teams_attributes_(1)">(1)</label> 
    <input id="bracket_teams_attributes_name" 
    name="bracket[teams_attributes][name]" size="30" type="text" value="Team 1"> 
    <input id="bracket_teams_attributes_id" 
    name="bracket[teams_attributes][id]" type="hidden" value="64"> 
</td> 

변경 리스너는 커피 스크립트에 나타나는 : 난 그냥 app--을 사용하고있는 경우 성능 문제를 무시하고,이 의도 한대로 작동

nameTeam = (target) -> 
    send_put(t) for t in $(target) 

send_put = (target) -> 
    newName = target.value 
    node=$(target).closest('td').data('node') 
    $.ajax 
    type: 'PUT' 
    url: $(target).closest('form').attr('action') 
    data: 
     'team[name]': newName 
     'bracket[node]': node 

$ -> 
    $('input#bracket_teams_attributes_name').on 'change', (e) => nameTeam e.target 

에 관계없이 방법 텍스트 필드를 변경하고 변경 이벤트가 발생하며 데이터베이스가 업데이트됩니다.

Javascript를 테스트하는 방법을 배우려고하면서이 테스트를 통해이 변경 이벤트를 트리거하는 코드를 작성하고 싶었습니다. 상수는 적절한 값이

within(NODE_64_CSS) do 
    fill_and_click_script = 
     %Q(
     $('#{NODE_64_CSS} #{INPUT_TEAM_CSS}').focus().val('#{new_name}'); 
     $('#{NODE_64_CSS} #{INPUT_TEAM_CSS}').focus().trigger('change'); 
     ) 
    page.driver.execute_script(fill_and_click_script) 
end 

(그들은 원래로드로 페이지가 올바른지 확인하기 위해 테스트에 다른 곳에서 사용하고 있습니다) :이를 위해, 나는 카피 바라/자바 스크립트/jQuery를 할 경우 다음과 같은 비트가 있습니다.

내 테스트가 변경 리스너를 트리거하지 못하도록 막는 원인이 될 수있는 StackOverflow 및 블로그를 수색하는 데 많은 시간을 할애하여 Webkit 및 다양한 다른 방법을 사용하여 폼 값 변경/변경 이벤트 트리거 , 모두 아무 소용이 없습니다. 웹 킷과 send-keys의 일부 버전을 사용하는 경우 send_and_open_page을 실행하면 페이지에 변경 내용이 표시되지 않지만 Selenium-Webdriver를 사용하면 을 수행합니다. 새 텍스트를 입력했는지 확인하십시오. 그럼에도 불구하고 페이지의 변경 리스너가 실행되지 않으며 데이터베이스가 변경되지 않습니다.

저는이 스택에 익숙하지 않았기 때문에 나는 분명히 잘못된 것을했을 것으로 기대합니다.하지만이 시점을 어디에서 봐야할지 모르겠습니다.

내 보석 환경이 포함되어 당신이이 문제를 해결해야 할 기분이 추가 정보가있다

cucumber (1.3.11) 
    ~/.rvm/gems/ruby-2.0.0-p451/gems/cucumber-1.3.11 
rails (3.2.13) 
    ~/.rvm/gems/ruby-2.0.0-p451/gems/rails-3.2.13 
cucumber-rails (1.4.0) 
    ~/.rvm/gems/ruby-2.0.0-p451/gems/cucumber-rails-1.4.0 
selenium-webdriver (2.42.0) 
    ~/.rvm/gems/ruby-2.0.0-p451/gems/selenium-webdriver-2.42.0 
capybara (2.2.1) 
    ~/.rvm/gems/ruby-2.0.0-p451/gems/capybara-2.2.1 
rspec-rails (2.14.1) 
    ~/.rvm/gems/ruby-2.0.0-p451/gems/rspec-rails-2.14.1 
capybara-screenshot (0.3.19) 
    ~/.rvm/gems/ruby-2.0.0-p451/gems/capybara-screenshot-0.3.19 

경우에, 나는 기꺼이 그것을 제공 할 수 있습니다.

는 업데이트 : 버그에서 거기 지점에 도달 (더 이상 유지 없습니다이나 그 하부 구조의 일부이기 때문에, 당연히)

나는 이제 내 자바 스크립트 통합 테스트 도구로 Culerity을 사용하려고하고있다 NoMethodError의 결과 인 Celerity - capybara-celerity gem 내의 'Cabybara : Server 인스턴스'에 대해 'url'이 정의되지 않았습니다.

답변

1

분명히 나에게 이것이 정확히 무엇을해야하는지 명확히 알지 못한다. 내 문제는 미리 컴파일 된 자산을 사용함에 기인한다. 내 개발 및 테스트 환경이 기능적으로 동일하고 개발 버전이 챔피언처럼 작동했기 때문에 이것은 이상합니다.

어쨌든 적어도 변경 청취 테스트를받을 수 있습니다. 내 문제를 해결하는 데 도움

소위 포스트이었다 : https://groups.google.com/forum/#!searchin/ruby-capybara/selenium $ $ 20 20event $ 20 % 7Csort : 날짜/루비 - 카피 바라/u8Tnd6SqD3k/Lou4jBsJuo8J

How to avoid precompiled assets being served in development mode?

내가 때문에 카피 바라의 googlegroup에이 게시물의 거기에 도착

1

코드가 제대로 작동하는 것 같습니다. 당신이 시도 할 수있는 한가지 : 필드에 텍스트를 입력 한 후 AJAX 호출 시간을 완료하기 위해 테스트에 sleep 5 호출을 추가하십시오. 이것은 Capybara에 의해 처리되어야하지만 어쩌면 거기에 뭔가 잘못된 것이있을 것입니다.

또한 console.log 또는 일부 문을 추가하여 변경 핸들러가 실행되지 않고 AJAX 호출에 문제가 없는지 확인할 수 있습니다.

+0

내 문제에 관심을 가져 주셔서 감사합니다, 알렉스. –

+0

죄송합니다. 다시 연락해 주셔서 너무 오래 걸렸습니다. 나는 내가 찾을 수있는만큼 많은 것을 시도해 왔고, 나는 그 길을 따라 물건들을 깨뜨렸다. 이제 내가 있던 곳으로 돌아 왔고, 변경된 청취자가 해고되지 않았 음을 나타내는 브라우저 측 출력이 없다는 것을 확인할 수 있습니다. –

관련 문제