Тест системы Rails не загружается Vue
В моем приложении rails 5.1 есть функция Vue, которая в основном принимает глубоко вложенную форму. Эта функция прекрасно работает при разработке, подготовке и производстве, однако при использовании новых системных тестов minitest с селеном и капибарой vue не загружается. Поскольку Selenium показывает вам, что происходит в режиме реального времени, я вижу, что элементы rails (такие как _header, _footer, h1-Title) все загружаются нормально, но фрагмент Vue никогда не появляется.
Вот мои настройки тестирования:
Gemfile
group :test do
gem 'minitest-rails'
gem 'minitest-reporters'
gem 'minitest-rails-capybara'
gem 'faker'
gem 'capybara', '~> 2.7', '>= 2.7.1'
gem 'selenium-webdriver'
gem 'simplecov', :require => false
end
Тест /test_helper.rb
ENV["RAILS_ENV"] = "test"
require 'simplecov'
SimpleCov.start 'rails'
require File.expand_path("../../config/environment", __FILE__)
require "rails/test_help"
require "minitest/rails"
require "minitest/rails/capybara"
require "minitest/pride"
require 'minitest/reporters'
require "support/test_password_helper"
Minitest::Reporters.use! Minitest::Reporters::SpecReporter.new
ActiveRecord::FixtureSet.context_class.send :include, TestPasswordHelper
class ActiveSupport::TestCase
require "#{Rails.root}/db/seeds.rb"
fixtures :all
require 'minitest/autorun'
include TestPasswordHelper
# Setup all fixtures in test/fixtures/*.yml for all tests in alphabetical order.
# Add more helper methods to be used by all tests here...
def sign_in(user)
post user_session_path \
'user[email]' => user.email,
'user[password]' => user.password
end
def submit_form
find('input[name="commit"]').click
end
end
Тест /application_system_test_case.rb
require "test_helper"
class ApplicationSystemTestCase < ActionDispatch::SystemTestCase
driven_by :selenium, using: :chrome, screen_size: [1400, 1400]
include Devise::Test::IntegrationHelpers
end
тест / система /proposals_test.rb
require "application_system_test_case"
class ProposalsTest < ApplicationSystemTestCase
test 'create a proposal' do
sign_in users(:martin)
@supplier = businesses(:supplier_two)
@project = projects(:pete_project_three)
visit dashboard_path
assert_selector 'h3', text: @supplier.display_name
assert_link text: 'Propose for project'
click_on 'Create Proposal'
assert_selector 'h1', text: 'New Proposal'
assert_selector 'small', text: '(Version: 1)'
fill_in 'title0', with: 'This is a title'
fill_in 'body0', with: 'This is a body'
click_on 'Add Section'
fill_in 'title1', with: 'This is a second title'
fill_in 'body1', with: 'This is a second body'
end
end
Сам тест не проходит в fill_in 'title0', with: 'This is a title'
потому что функция vue не загружается
Заметьте, я использую турболинки, но, как уже упоминалось, на практике все работает идеально, просто не загружается для системных тестов.
Рады предоставить более подробную информацию, если это необходимо
Обновить
Как и было предложено, я смог получить доступ к журналам консоли браузера, используя byugug в тесте (спасибо Томасу), что позволило мне подключиться к консоли, когда тест был приостановлен. Это ошибка в консоли:
Uncaught Error: Module build failed: SyntaxError: Unexpected token, expected (27:7)
25 | //
26 |
27 | import import bus from '../bus'
| ^
28 | import ClientDetails from './ClientDetails.vue'
29 | import SupplierDetails from './SupplierDetails.vue'
30 | import Sections from './Sections.vue'
at Object.disposed (proposal.js:518)
at __webpack_require__ (proposal.js:20)
at Object.module.exports.render._vm (proposal.js:539)
at __webpack_require__ (proposal.js:20)
at Object.exports.byteLength (proposal.js:15148)
at __webpack_require__ (proposal.js:20)
at module.exports.rawScriptExports (proposal.js:66)
at proposal.js:69
Кажется, проблема может быть с import import
опечатка, но это не мое bus
так это должен быть сам Vue.js?
1 ответ
Во-первых, вы смешиваете использование Capybara с методами запросов (get, post и т. Д.). Вы не можете сделать это, так как методы запроса не влияют на сеанс, который использует Capybara (недавно была сделана попытка rails отменить определение методов запроса в SystemTestCase из-за путаницы, которую они вызывают - https://github.com/rails/rails/commit/1aea1ddd2a4b3bfa7bb556e4c7cd40f9531ac2e3). Чтобы это исправить sign_in
Метод должен измениться, чтобы фактически посетить страницу, заполнить поля и отправить форму. Во-вторых, в конце sign_in вам нужно подтвердить что-то, что указывало бы, что вход в систему завершен. Если это не сделано, визит сразу же после звонка sign_in
Это может произойти до того, как файлы cookie будут отправлены обратно в браузер, и вы все равно можете не войти в систему.
def sign_in(user)
visit new_user_session_path # wherever the login page is
fill_in('user[email]', with: user.email)
fill_in('user[password], with: user.password)
click_button('Sign in') # whatever needs to be clicked to login
assert_text('You are now logged in') # whatever message confirms the login succeeded
end