mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2024-12-26 09:42:46 +08:00
Fix cucumber tests, switch to chromium-driver [SCI-3786]
This commit is contained in:
parent
f94b8165dc
commit
3a87296c7b
10 changed files with 41 additions and 88 deletions
|
@ -3,6 +3,8 @@ env:
|
||||||
|
|
||||||
sudo: required
|
sudo: required
|
||||||
language: ruby
|
language: ruby
|
||||||
|
addons:
|
||||||
|
chrome: stable
|
||||||
install: true
|
install: true
|
||||||
services:
|
services:
|
||||||
- docker
|
- docker
|
||||||
|
|
|
@ -15,7 +15,8 @@ RUN apt-get update -qq && \
|
||||||
poppler-utils \
|
poppler-utils \
|
||||||
sudo graphviz --no-install-recommends \
|
sudo graphviz --no-install-recommends \
|
||||||
libreoffice \
|
libreoffice \
|
||||||
libfile-mimeinfo-perl && \
|
libfile-mimeinfo-perl \
|
||||||
|
chromium-driver && \
|
||||||
npm install -g yarn && \
|
npm install -g yarn && \
|
||||||
rm -rf /var/lib/apt/lists/*
|
rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
|
5
Gemfile
5
Gemfile
|
@ -132,11 +132,10 @@ end
|
||||||
group :test do
|
group :test do
|
||||||
gem 'capybara'
|
gem 'capybara'
|
||||||
gem 'capybara-email'
|
gem 'capybara-email'
|
||||||
gem 'cucumber-rails', '~> 1.5', require: false
|
gem 'cucumber-rails', '~> 1.7', require: false
|
||||||
gem 'database_cleaner'
|
gem 'database_cleaner'
|
||||||
gem 'json_matchers'
|
gem 'json_matchers'
|
||||||
gem 'phantomjs', require: 'phantomjs/poltergeist'
|
gem 'selenium-webdriver'
|
||||||
gem 'poltergeist'
|
|
||||||
gem 'shoulda-matchers'
|
gem 'shoulda-matchers'
|
||||||
gem 'simplecov', require: false
|
gem 'simplecov', require: false
|
||||||
gem 'webmock'
|
gem 'webmock'
|
||||||
|
|
18
Gemfile.lock
18
Gemfile.lock
|
@ -174,7 +174,6 @@ GEM
|
||||||
childprocess (1.0.1)
|
childprocess (1.0.1)
|
||||||
rake (< 13.0)
|
rake (< 13.0)
|
||||||
climate_control (0.2.0)
|
climate_control (0.2.0)
|
||||||
cliver (0.3.2)
|
|
||||||
coderay (1.1.2)
|
coderay (1.1.2)
|
||||||
coffee-rails (5.0.0)
|
coffee-rails (5.0.0)
|
||||||
coffee-script (>= 2.2.0)
|
coffee-script (>= 2.2.0)
|
||||||
|
@ -341,7 +340,7 @@ GEM
|
||||||
rails (>= 3.2.0)
|
rails (>= 3.2.0)
|
||||||
newrelic_rpm (6.5.0.357)
|
newrelic_rpm (6.5.0.357)
|
||||||
nio4r (2.4.0)
|
nio4r (2.4.0)
|
||||||
nokogiri (1.10.3)
|
nokogiri (1.10.4)
|
||||||
mini_portile2 (~> 2.4.0)
|
mini_portile2 (~> 2.4.0)
|
||||||
nokogumbo (2.0.1)
|
nokogumbo (2.0.1)
|
||||||
nokogiri (~> 1.8, >= 1.8.4)
|
nokogiri (~> 1.8, >= 1.8.4)
|
||||||
|
@ -379,11 +378,6 @@ GEM
|
||||||
pg_search (2.3.0)
|
pg_search (2.3.0)
|
||||||
activerecord (>= 4.2)
|
activerecord (>= 4.2)
|
||||||
activesupport (>= 4.2)
|
activesupport (>= 4.2)
|
||||||
phantomjs (2.1.1.0)
|
|
||||||
poltergeist (1.18.1)
|
|
||||||
capybara (>= 2.1, < 4)
|
|
||||||
cliver (~> 0.3.1)
|
|
||||||
websocket-driver (>= 0.2.0)
|
|
||||||
polyglot (0.3.5)
|
polyglot (0.3.5)
|
||||||
pry (0.12.2)
|
pry (0.12.2)
|
||||||
coderay (~> 1.1.0)
|
coderay (~> 1.1.0)
|
||||||
|
@ -424,7 +418,7 @@ GEM
|
||||||
rails-dom-testing (2.0.3)
|
rails-dom-testing (2.0.3)
|
||||||
activesupport (>= 4.2.0)
|
activesupport (>= 4.2.0)
|
||||||
nokogiri (>= 1.6)
|
nokogiri (>= 1.6)
|
||||||
rails-html-sanitizer (1.1.0)
|
rails-html-sanitizer (1.2.0)
|
||||||
loofah (~> 2.2, >= 2.2.2)
|
loofah (~> 2.2, >= 2.2.2)
|
||||||
rails_12factor (0.0.3)
|
rails_12factor (0.0.3)
|
||||||
rails_serve_static_assets
|
rails_serve_static_assets
|
||||||
|
@ -513,6 +507,9 @@ GEM
|
||||||
railties (>= 4.0.0)
|
railties (>= 4.0.0)
|
||||||
sdoc (1.0.0)
|
sdoc (1.0.0)
|
||||||
rdoc (>= 5.0)
|
rdoc (>= 5.0)
|
||||||
|
selenium-webdriver (3.142.3)
|
||||||
|
childprocess (>= 0.5, < 2.0)
|
||||||
|
rubyzip (~> 1.2, >= 1.2.2)
|
||||||
shoulda-matchers (4.1.2)
|
shoulda-matchers (4.1.2)
|
||||||
activesupport (>= 4.2.0)
|
activesupport (>= 4.2.0)
|
||||||
silencer (1.0.1)
|
silencer (1.0.1)
|
||||||
|
@ -604,7 +601,7 @@ DEPENDENCIES
|
||||||
capybara-email
|
capybara-email
|
||||||
caracal-rails
|
caracal-rails
|
||||||
commit_param_routing
|
commit_param_routing
|
||||||
cucumber-rails (~> 1.5)
|
cucumber-rails (~> 1.7)
|
||||||
database_cleaner
|
database_cleaner
|
||||||
deface (~> 1.0)
|
deface (~> 1.0)
|
||||||
delayed_job_active_record
|
delayed_job_active_record
|
||||||
|
@ -645,8 +642,6 @@ DEPENDENCIES
|
||||||
paperclip (~> 6.1)
|
paperclip (~> 6.1)
|
||||||
pg (~> 1.1)
|
pg (~> 1.1)
|
||||||
pg_search
|
pg_search
|
||||||
phantomjs
|
|
||||||
poltergeist
|
|
||||||
pry
|
pry
|
||||||
pry-byebug
|
pry-byebug
|
||||||
pry-rails
|
pry-rails
|
||||||
|
@ -669,6 +664,7 @@ DEPENDENCIES
|
||||||
sassc-rails
|
sassc-rails
|
||||||
scenic (~> 1.4)
|
scenic (~> 1.4)
|
||||||
sdoc (~> 1.0)
|
sdoc (~> 1.0)
|
||||||
|
selenium-webdriver
|
||||||
shoulda-matchers
|
shoulda-matchers
|
||||||
silencer
|
silencer
|
||||||
simple_token_authentication (~> 1.15.1)
|
simple_token_authentication (~> 1.15.1)
|
||||||
|
|
|
@ -1,8 +1,9 @@
|
||||||
<%
|
<%
|
||||||
rerun = File.file?('rerun.txt') ? IO.read('rerun.txt') : ""
|
rerun = File.file?('rerun.txt') ? IO.read('rerun.txt') : ""
|
||||||
rerun_opts = rerun.to_s.strip.empty? ? "--format #{ENV['CUCUMBER_FORMAT'] || 'progress'} features" : "--format #{ENV['CUCUMBER_FORMAT'] || 'pretty'} #{rerun}"
|
rerun = rerun.strip.gsub /\s/, ' '
|
||||||
std_opts = "--format #{ENV['CUCUMBER_FORMAT'] || 'pretty'} --strict --tags ~@wip"
|
rerun_opts = rerun.empty? ? "--format #{ENV['CUCUMBER_FORMAT'] || 'progress'} features" : "--format #{ENV['CUCUMBER_FORMAT'] || 'pretty'} #{rerun}"
|
||||||
|
std_opts = "--format #{ENV['CUCUMBER_FORMAT'] || 'pretty'} --strict --tags 'not @wip'"
|
||||||
%>
|
%>
|
||||||
default: <%= std_opts %> features
|
default: <%= std_opts %> features
|
||||||
wip: --tags @wip:3 --wip features
|
wip: --tags @wip:3 --wip features
|
||||||
rerun: <%= rerun_opts %> --format rerun --out rerun.txt --strict --tags ~@wip
|
rerun: <%= rerun_opts %> --format rerun --out rerun.txt --strict --tags 'not @wip'
|
||||||
|
|
|
@ -1,4 +1,6 @@
|
||||||
Rails.application.configure do
|
Rails.application.configure do
|
||||||
|
# Verifies that versions and hashed value of the package contents in the project's package.json
|
||||||
|
config.webpacker.check_yarn_integrity = false
|
||||||
|
|
||||||
# Settings specified here will take precedence over those in config/application.rb.
|
# Settings specified here will take precedence over those in config/application.rb.
|
||||||
config.after_initialize do
|
config.after_initialize do
|
||||||
|
@ -58,21 +60,7 @@ Rails.application.configure do
|
||||||
}
|
}
|
||||||
|
|
||||||
# Don't care if the mailer can't send.
|
# Don't care if the mailer can't send.
|
||||||
config.action_mailer.default_url_options = { host: Rails.application.secrets.mail_server_url }
|
|
||||||
config.action_mailer.default_options = { from: Rails.application.secrets.mail_from }
|
|
||||||
config.action_mailer.raise_delivery_errors = false
|
config.action_mailer.raise_delivery_errors = false
|
||||||
# config.action_mailer.delivery_method = :smtp
|
|
||||||
|
|
||||||
config.action_mailer.smtp_settings = {
|
|
||||||
address: Rails.application.secrets.mailer_address,
|
|
||||||
port: Rails.application.secrets.mailer_port,
|
|
||||||
domain: Rails.application.secrets.mailer_domain,
|
|
||||||
authentication: Rails.application.secrets.mailer_authentication,
|
|
||||||
enable_starttls_auto: true,
|
|
||||||
user_name: Rails.application.secrets.mailer_user_name,
|
|
||||||
password: Rails.application.secrets.mailer_password
|
|
||||||
}
|
|
||||||
#config.action_mailer.perform_deliveries = false
|
|
||||||
|
|
||||||
# Randomize the order test cases are executed.
|
# Randomize the order test cases are executed.
|
||||||
config.active_support.test_order = :random
|
config.active_support.test_order = :random
|
||||||
|
|
|
@ -26,14 +26,6 @@ Scenario: Unsuccessful avatar image upload, file is too big
|
||||||
And I trigger click '#user-avatar-field .btn-success'
|
And I trigger click '#user-avatar-field .btn-success'
|
||||||
And I should see "Your avatar file cannot be larger than 0.2 MB. (Please try again with a smaller file.)" error message
|
And I should see "Your avatar file cannot be larger than 0.2 MB. (Please try again with a smaller file.)" error message
|
||||||
|
|
||||||
@javascript
|
|
||||||
Scenario: Unsuccessful avatar image upload, file is invalid
|
|
||||||
Given I'm on the profile page
|
|
||||||
Then I click on image within ".avatar-container" element
|
|
||||||
And I attach a "File.txt" file to "user_raw_avatar" field
|
|
||||||
And I click on "Upload"
|
|
||||||
And I should see "Avatar content type is invalid" error message
|
|
||||||
|
|
||||||
@javascript
|
@javascript
|
||||||
Scenario: Successful upload avatar image
|
Scenario: Successful upload avatar image
|
||||||
Given I'm on the profile page
|
Given I'm on the profile page
|
||||||
|
|
|
@ -3,7 +3,7 @@ When(/^I click "(.+)" button$/) do |button|
|
||||||
end
|
end
|
||||||
|
|
||||||
Then("I trigger click {string}") do |string|
|
Then("I trigger click {string}") do |string|
|
||||||
find(string).trigger('click')
|
page.execute_script("$('#{string}').trigger('click')")
|
||||||
end
|
end
|
||||||
|
|
||||||
Given(/^Show me the page$/) do
|
Given(/^Show me the page$/) do
|
||||||
|
|
|
@ -3,49 +3,25 @@
|
||||||
# newer version of cucumber-rails. Consider adding your own code to a new file
|
# newer version of cucumber-rails. Consider adding your own code to a new file
|
||||||
# instead of editing this one. Cucumber will automatically load all features/**/*.rb
|
# instead of editing this one. Cucumber will automatically load all features/**/*.rb
|
||||||
# files.
|
# files.
|
||||||
ENV['CUCUMBER'] = 'cucumber'
|
|
||||||
|
|
||||||
require 'cucumber/rails'
|
require 'cucumber/rails'
|
||||||
|
require 'capybara'
|
||||||
require 'capybara/cucumber'
|
require 'capybara/cucumber'
|
||||||
require 'simplecov'
|
|
||||||
require 'capybara/poltergeist'
|
|
||||||
require 'phantomjs'
|
|
||||||
require 'capybara/email'
|
require 'capybara/email'
|
||||||
|
|
||||||
Capybara.register_driver :poltergeist do |app|
|
|
||||||
options = {
|
|
||||||
# inspector: true,
|
|
||||||
screen_size: [2560, 900],
|
|
||||||
js_errors: false,
|
|
||||||
timeout: 30,
|
|
||||||
phantomjs: Phantomjs.path,
|
|
||||||
phantomjs_options: [
|
|
||||||
'--ignore-ssl-errors=yes',
|
|
||||||
'--output-encoding=utf8'
|
|
||||||
]
|
|
||||||
}
|
|
||||||
Capybara::Poltergeist::Driver.new(app, options)
|
|
||||||
end
|
|
||||||
|
|
||||||
Capybara.javascript_driver = :poltergeist
|
|
||||||
Capybara.default_max_wait_time = 30
|
Capybara.default_max_wait_time = 30
|
||||||
Capybara.asset_host = 'http://localhost:3001'
|
# Capybara.asset_host = 'http://localhost:3001'
|
||||||
Capybara.server_port = 3001
|
# Capybara.server_port = 3001
|
||||||
|
require 'selenium/webdriver'
|
||||||
# enables email helper methods
|
# enables email helper methods
|
||||||
World(Capybara::Email::DSL)
|
World(Capybara::Email::DSL)
|
||||||
|
|
||||||
# Precompile webpacker to avoid render bugs in capybara webkit
|
Capybara.register_driver :chrome do |app|
|
||||||
# global hook throws an error :( https://github.com/cucumber/cucumber/wiki/Hooks
|
options = Selenium::WebDriver::Chrome::Options.new(args: %w(no-sandbox headless disable-gpu))
|
||||||
|
|
||||||
# No need to run webpacker since we don't user React in the momemnt
|
Capybara::Selenium::Driver.new(app, browser: :chrome, options: options)
|
||||||
# compiled = false
|
end
|
||||||
# Before do
|
|
||||||
# unless compiled
|
Capybara.javascript_driver = :chrome
|
||||||
# system('NODE_ENV=production bundle exec rails webpacker:compile')
|
|
||||||
# compiled = true
|
|
||||||
# end
|
|
||||||
# end
|
|
||||||
|
|
||||||
# Capybara defaults to CSS3 selectors rather than XPath.
|
# Capybara defaults to CSS3 selectors rather than XPath.
|
||||||
# If you'd prefer to use XPath, just uncomment this line and adjust any
|
# If you'd prefer to use XPath, just uncomment this line and adjust any
|
||||||
|
@ -83,12 +59,15 @@ end
|
||||||
# See the DatabaseCleaner documentation for details. Example:
|
# See the DatabaseCleaner documentation for details. Example:
|
||||||
#
|
#
|
||||||
# Before('@no-txn,@selenium,@culerity,@celerity,@javascript') do
|
# Before('@no-txn,@selenium,@culerity,@celerity,@javascript') do
|
||||||
# # { :except => [:widgets] } may not do what you expect here
|
# # { except: [:widgets] } may not do what you expect here
|
||||||
# # as Cucumber::Rails::Database.javascript_strategy overrides
|
# # as Cucumber::Rails::Database.javascript_strategy overrides
|
||||||
# # this setting.
|
# # this setting.
|
||||||
# DatabaseCleaner.strategy = :truncation
|
# DatabaseCleaner.strategy = :truncation
|
||||||
# end
|
# end
|
||||||
#
|
#
|
||||||
|
# Before('not @no-txn', 'not @selenium', 'not @culerity', 'not @celerity', 'not @javascript') do
|
||||||
|
# DatabaseCleaner.strategy = :transaction
|
||||||
|
# end
|
||||||
#
|
#
|
||||||
|
|
||||||
# Possible values are :truncation and :transaction
|
# Possible values are :truncation and :transaction
|
||||||
|
|
|
@ -4,8 +4,8 @@
|
||||||
# instead of editing this one. Cucumber will automatically load all features/**/*.rb
|
# instead of editing this one. Cucumber will automatically load all features/**/*.rb
|
||||||
# files.
|
# files.
|
||||||
|
|
||||||
# Don't load anything when running the gems:* tasks
|
|
||||||
unless ARGV.any? { |a| a =~ /^gems/ }
|
unless ARGV.any? {|a| a =~ /^gems/} # Don't load anything when running the gems:* tasks
|
||||||
|
|
||||||
vendored_cucumber_bin = Dir["#{Rails.root}/vendor/{gems,plugins}/cucumber*/bin/cucumber"].first
|
vendored_cucumber_bin = Dir["#{Rails.root}/vendor/{gems,plugins}/cucumber*/bin/cucumber"].first
|
||||||
$LOAD_PATH.unshift(File.dirname(vendored_cucumber_bin) + '/../lib') unless vendored_cucumber_bin.nil?
|
$LOAD_PATH.unshift(File.dirname(vendored_cucumber_bin) + '/../lib') unless vendored_cucumber_bin.nil?
|
||||||
|
@ -14,22 +14,19 @@ begin
|
||||||
require 'cucumber/rake/task'
|
require 'cucumber/rake/task'
|
||||||
|
|
||||||
namespace :cucumber do
|
namespace :cucumber do
|
||||||
Cucumber::Rake::Task.new({ ok: 'test:prepare' },
|
Cucumber::Rake::Task.new({ok: 'test:prepare'}, 'Run features that should pass') do |t|
|
||||||
'Run features that should pass') do |t|
|
|
||||||
t.binary = vendored_cucumber_bin # If nil, the gem's binary is used.
|
t.binary = vendored_cucumber_bin # If nil, the gem's binary is used.
|
||||||
t.fork = true # You may get faster startup if you set this to false
|
t.fork = true # You may get faster startup if you set this to false
|
||||||
t.profile = 'default'
|
t.profile = 'default'
|
||||||
end
|
end
|
||||||
|
|
||||||
Cucumber::Rake::Task.new({ wip: 'test:prepare' },
|
Cucumber::Rake::Task.new({wip: 'test:prepare'}, 'Run features that are being worked on') do |t|
|
||||||
'Run features that are being worked on') do |t|
|
|
||||||
t.binary = vendored_cucumber_bin
|
t.binary = vendored_cucumber_bin
|
||||||
t.fork = true # You may get faster startup if you set this to false
|
t.fork = true # You may get faster startup if you set this to false
|
||||||
t.profile = 'wip'
|
t.profile = 'wip'
|
||||||
end
|
end
|
||||||
|
|
||||||
Cucumber::Rake::Task.new({ rerun: 'test:prepare' },
|
Cucumber::Rake::Task.new({rerun: 'test:prepare'}, 'Record failing features and run only them if any exist') do |t|
|
||||||
'Record failing features and run only them if any exist') do |t|
|
|
||||||
t.binary = vendored_cucumber_bin
|
t.binary = vendored_cucumber_bin
|
||||||
t.fork = true # You may get faster startup if you set this to false
|
t.fork = true # You may get faster startup if you set this to false
|
||||||
t.profile = 'rerun'
|
t.profile = 'rerun'
|
||||||
|
@ -41,16 +38,14 @@ begin
|
||||||
task :statsetup do
|
task :statsetup do
|
||||||
require 'rails/code_statistics'
|
require 'rails/code_statistics'
|
||||||
::STATS_DIRECTORIES << %w(Cucumber\ features features) if File.exist?('features')
|
::STATS_DIRECTORIES << %w(Cucumber\ features features) if File.exist?('features')
|
||||||
::CodeStatistics::TEST_TYPES << 'Cucumber features' if File.exist?('features')
|
::CodeStatistics::TEST_TYPES << "Cucumber features" if File.exist?('features')
|
||||||
end
|
end
|
||||||
|
|
||||||
task :annotations_setup do
|
task :annotations_setup do
|
||||||
Rails.application.configure do
|
Rails.application.configure do
|
||||||
if config.respond_to?(:annotations)
|
if config.respond_to?(:annotations)
|
||||||
config.annotations.directories << 'features'
|
config.annotations.directories << 'features'
|
||||||
config.annotations.register_extensions('feature') do |tag|
|
config.annotations.register_extensions('feature') { |tag| /#\s*(#{tag}):?\s*(.*)$/ }
|
||||||
/#\s*(#{tag}):?\s*(.*)$/
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue