В тестовом посте Rspec / Capybara отсутствует параметр из формы, но параметр отправляется нормально в dev при тестировании вручную - PullRequest
0 голосов
/ 24 марта 2019

Один из моих тестов - создание поста формы через javascript, который удаляет первое поле ввода из формы.Тесты явно проваливаются из-за этого.При отладке с помощью binding.pry похоже, что сообщение js отбрасывает первый параметр [address_by_user] при публикации его на моем маршруте.Этот параметр публикуется просто отлично при тестировании через пользовательский интерфейс в localhost, но больше не работает с rspec.Есть идеи, что может вызвать это?Тесты проходили по состоянию на два дня назад, и формы не были изменены.Я попытался перезагрузить компьютер на случай, если это был процесс зомби или что-то кэшируется, но поведение продолжается.Есть мысли?

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

          var form_id = "#form-step" + currentIndex; 
          var my_form = $(form_id);
          var url = $(form_id).attr('action');
          var form_data = my_form.serialize();
          console.log(form_data);
          var submission = $.post(url, form_data);

Форма выглядит следующим образом и отправляется после нажатия кнопки «Далее» в мастере, чтоработает нормально.

<%= form_with(url:"add_property", scope: :property, class: "form", id:"form-step0") do |f| %>
      <div class="form-body" id="step0form">
      <h4 class="form-section"><i class="ft-location"></i> <%= t(:property_details) %></h4>
        <%= render 'shared/error_messages', object: f.object %>
        <div class="row">
          <div class="form-group pac-card col-md-8 offset-md-1 required" id='pac-card'> 
            <div class="field" id='pac-container'>
              <%= f.label :address_by_user, t(:address), class:"label-control" %>
              <%= f.text_field :address_by_user, :required => true, class: "form-control pac-input google-autocomplete", id:"pac-input" %>
            </div>
          </div>
          <div class="form-group form-row col-md-2">   
            <div class="field">
              <%= f.label :unit_number %>
              <%= f.text_field :unit_number, class: "form-control" %>
            </div>
          </div>
        </div>
        <div class="form-group form-row">   
          <div class="field col-md-2 offset-md-1">
            <%= f.label :bedrooms %>
            <%= f.number_field :bedrooms, :required => true, class: "form-control", in: 1...20 %>
          </div>
          <div class="field col-md-2 offset-md-1">
            <%= f.label :bathrooms %>
            <%= f.number_field :bathrooms, class: "form-control", in:1...10 %>
          </div>
          <div class="field col-md-2 offset-md-1">
            <%= f.label :accommodates %>
            <%= f.number_field :accommodates, class: "form-control", min: "0" %>
          </div>
        </div>
        <div class="form-group form-row">
          <div class="field col-md-2 offset-md-1"><%=label_tag(t(:property_type))%></div>
        </div>
        <div class="form-group form-row" data-toggle="buttons">
          <div class="btn-group col-md-12">
            <div class="field col-md-2 offset-md-1">
              <%= f.label :room_type, class: 'text-center btn btn-default active' do %>
                <%= image_tag('house-icon.png') %>
                <br>
                <%= f.radio_button :room_type, "entire_place", checked: true %>
                <span>Entire Place</span>
              <% end %>
            </div>
            <div class="field col-md-2 offset-md-1">
              <%= f.label :room_type, class: 'text-center btn btn-default' do %>
                <%= image_tag('room.png') %>
                </br>
                <%= f.radio_button :room_type, "private_room" %>
                <span>Private Room</span>
              <% end %>
            </div>
            <div class="field col-md-2 offset-md-1">
              <%= f.label :room_type, class: 'text-center btn btn-default' do %>
                <%= image_tag('people.png') %>
                </br>
                <%= f.radio_button :room_type, "shared_room" %>
                <span>Shared Room</span>
              <% end %>
            </div>
          </div>
        </div>
        <div id="hidden-fields">
          <%= f.hidden_field(:latitude, id: 'latitude') %>
          <%= f.hidden_field(:longitude, id: 'longitude') %>
          <%= f.hidden_field(:street_number, id: 'street_number') %>
          <%= f.hidden_field(:street_name, id: 'route') %>
          <%= f.hidden_field(:city, id: 'locality')%>
          <%= f.hidden_field(:state, id: 'administrative_area_level_1') %>
          <%= f.hidden_field(:country, id: 'country')%>     
        </div>
      </div>
    <% end %>

При тестировании непосредственно с сайта через localhost все параметры публикуются нормально, и я получаю следующее: (как и ожидалось)

<ActionController::Parameters {"address_by_user"=>"Pura Uvita Vacation Home, Puntarenas Province, Uvita, Costa Rica", "unit_number"=>"", "bedrooms"=>"2", "bathrooms"=>"2.0", "accommodates"=>"6", "room_type"=>"entire_place", "latitude"=>"9.1839769", "longitude"=>"-83.72444630000001", "street_number"=>"", "street_name"=>"", "city"=>"Uvita", "state"=>"Provincia de Puntarenas", "country"=>"Costa Rica"} permitted: false>

Когда параметры получены с помощью привязки.pry из потока rspec, следующий результат:

<ActionController::Parameters {"unit_number"=>"", "bedrooms"=>"2", "bathrooms"=>"2", "accommodates"=>"6", "room_type"=>"entire_place", "latitude"=>"", "longitude"=>"", "street_number"=>"", "street_name"=>"", "city"=>"", "state"=>"", "country"=>""} permitted: false>

1 Ответ

0 голосов
/ 24 марта 2019

Две наиболее вероятные причины этого

  1. Поля больше не заполняются - посмотрите на браузер во время выполнения тестов и посмотрите, правильно ли заполнена форма.

  2. У вас есть ошибка в другом файле JS, из-за которой JS, по вашему мнению, обрабатывает форму, чтобы она не запускалась. Это может произойти из-за того, что ресурсы JS объединяются в тестовой среде, что допускает ошибку в файле JS, предотвращающую объединение любых файлов после того, как он не будет обработан.

...