In part 2 we set up a Rake task to run webpack, ensuring that most deploy systems would build our entries for us.
I missed that we needed the webpack Rake task to be run before feature tests too. Without this, we need to run the task manually before running our test suite to avoid erroneous failures due to the assets not being up to date. Running Rake tasks from anywhere in your application in relatively easy, but we need a way to run webpack only if we're running feature specs. Fortunately, I always set my projects up to allow that anyway.
Separate all your feature spec specific code and configuration from your
spec/rails_helper.rb
/spec/spec_helper.rb
into a spec/feature_helper.rb
,
and change all your feature specs to require this file instead. My
spec/feature_helper.rb
looks something like this:
# spec/feature_helper.rb
require 'rails_helper'
require 'capybara/rspec'
require 'capybara/poltergeist'
Capybara.javascript_driver = :poltergeist
It require's my rails_helper
, which requires my spec_helper
and sets up my
Rails-specific test environment. Then it requires the gems that are needed for
my feature tests, currently Capybara
and Poltergeist (which are
set as require: false
in my Gemfile
so they won't get loaded when I'm
running specs that don't require them). Some projects might not have a
rails_helper.rb
, and that's fine; just require spec_helper.rb
in your
feature_helper.rb
instead.
With this in place we can add RSpec configuration that will only get run if at least one feature spec is being run. Our problem calls for us to run our webpack Rake task before the test suite runs, so here's roughly what your helper file should like.
# spec/feature_helper.rb
require 'rails_helper'
require 'capybara/rspec'
require 'capybara/poltergeist'
Capybara.javascript_driver = :poltergeist
RSpec.configure do |config|
config.before(:suite) do
YourApplicationName::Application.load_tasks
Rake::Task[:webpack].invoke
end
end
It should go without saying that you must replace YourApplicationName
with
the actual name of your Rails application.
We're done; when we run our test suite on your CI server or switch branches without the watcher running, they should run against up to date webpack entries.
Note: I tricked you into extracting your feature-specific configuration and requires into a separate file, and thus speeding up your individual test runs a tiny bit. You're welcome.
This doesn`t work for me. I get error:
Why i`m getting this ?