Ошибка c поведение приложения Vue. js в тестовом режиме (rspe c) - PullRequest
0 голосов
/ 27 февраля 2020

У меня есть приложение Rails 6, которое я тестирую с помощью rspe c, Capybara и Chrome на удаленной виртуальной машине. С новой драгоценностью вебдрайверов, а не той древней полтергейстской штукой.

В ней есть мини-приложение менеджера пользователей, написанное на Vue 2. что-то, что ведет себя в некоторой степени ошеломляюще:

Выдержка из Vue приложения

{
  el: "#app",
  data: {
    initial_load_completed: false,
    users: []
  },
  created: function(){
    this.loadUsers();
  },
  methods: {
    loadUsers: function(){ /* straightforward JSON load from server into .users and set .initial_load_completed to true */ }
    /* lots of other code */
  },
  computed: {
    hasUsers: function(){
      return this.users.length > 0;
    }
    /* lots of other code */
  }
}

Просмотр выдержки

<div id="app">
  <!-- loads of other code -->
  <div v-if="!initial_load_completed && !hasUsers">Loading your users, please wait...</div>
  <div v-if="initial_load_completed && !hasUsers">There are no users for your account right now...</div>
  <!-- lots of other code -->
</div>

Приложение отлично работает в prod и dev, на chrome, safari , планшеты, iphones, даже на моем 3-летнем Smart TV Trashroid, даже на IE. Но в тестах rspe c он выполняет следующие действия:

Capybara capture

Этот пример с отображением / скрытием этих двух элементов div, основанных на загруженных пользователях, просто что на этой картинке неправильно, многие другие элементы управления не должны отображаться с пустым массивом пользователей. И это счастливый, счастливый, радостный случай, около 50% примеров запускает, он просто ничего не выводит, #app пусто ... случайно.

В моем test.log я вижу, как Приложение Vue достигает конечной точки JSON моего бэк-энда и того, как оно отображает данные с помощью 200.

Для жизни я не могу представить, как initial_load_completed может быть истинным и ложным в в то же время.

Что я пробовал? Перезагрузил машину (хе). Затем переустановил все программное обеспечение до последних версий. Затем потратил около 2 дней, пытаясь заставить chrome работать на «виртуальном» дисплее, к которому я бы подключился, чтобы посмотреть, что происходит ... после примерно 218 итераций, исправляющих различные ошибки / конфигурации и конфигурации, а также код и знаки и другие ошибки и так далее, я просто сдался.

Определение драйвера:

Webdrivers.logger.level = :DEBUG
default_chrome_args = [ '--disable-extensions', '--no-sandbox', '--disable-dev-shm-usage', '--remote-debugging-port=9222', '--remote-debugging-address=0.0.0.0' ]
Capybara.register_driver :headless_chrome do |app|
   capabilities = Selenium::WebDriver::Remote::Capabilities.chrome( loggingPrefs: { browser: 'ALL' }, chromeOptions: {
       'args' => default_chrome_args + ['--headless', '--disable-gpu', '--window-size=1920,1600' ]
   })
   Capybara::Selenium::Driver.new app, browser: :chrome, desired_capabilities: capabilities
end

CSP отключены, все равно пробовали с ними и без них.

Вчера Я попытался записать JS ошибок:

config.after(:each, type: [ :feature, :system ], js: true) do
    errors = page.driver.browser.manage.logs.get(:browser)
    if errors.present?
        aggregate_failures 'javascript errrors' do
            errors.each do |error|
                expect(error.level).not_to eq('SEVERE'), error.message
                next unless error.level == 'WARNING'
                STDERR.puts 'WARN: javascript warning'
                STDERR.puts error.message
            end
        end
    end
end

... не повезло.

config.after(:each, type: [ :feature, :system ], js: true) do
    errors = page.driver.browser.manage.logs.get(:browser)
            errors.each do |error|
                STDERR.puts error.message
            end
end

... также нада, как и несколько других вариантов этого кода. Кажется, я даже не могу привести примеры «помещает: что угодно» в stdout, но это уже другая история.

Может ли кто-то добрый в душе, пожалуйста, помогите бедному глупому мне не потерять все волосы?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...