spec/lib/percy/capybara/loaders/sprockets_loader_spec.rb in percy-capybara-3.1.1 vs spec/lib/percy/capybara/loaders/sprockets_loader_spec.rb in percy-capybara-3.1.2
- old
+ new
@@ -12,11 +12,11 @@
end
let(:rails_public_test_data_path) do
File.expand_path('../../client/rails_public_test_data', __FILE__)
end
let(:loader) do
- described_class.new(
+ Percy::Capybara::Loaders::SprocketsLoader.new(
page: page,
sprockets_environment: environment,
sprockets_options: sprockets_options,
)
end
@@ -27,19 +27,19 @@
end
let(:digest_enabled) { false }
let(:sprockets_options) do
options = double('options')
# Set specific files we want to compile. In normal use, this would be all asset files.
- precompile_list = [%r{(?:/|\\|\A)(base|digested)\.(css|js)$|\.map|\.png}]
+ precompile_list = [/(?:\/|\\|\A)(base|digested)\.(css|js)$|\.map|\.png/]
allow(options).to receive(:precompile).and_return(precompile_list)
allow(options).to receive(:digest).and_return(digest_enabled)
options
end
describe '#snapshot_resources' do
context 'Rack::Test', type: :feature do
- before { Capybara.app = SimpleRackApp }
+ before(:each) { Capybara.app = SimpleRackApp }
it 'returns the root HTML resource' do
visit '/'
resources = loader.snapshot_resources
expect(resources.map(&:resource_url)).to eq(['/'])
@@ -76,35 +76,37 @@
]
expect(resources.map(&:resource_url)).to eq(expected_resources)
expect(resources.first.content).to include('.colored-by-base')
end
context 'Rails app' do
- before do
+ def setup_rails_double
# Pretend like we're in a Rails app right now, all we care about is Rails.public_path.
rails_double = double('Rails')
# Pretend like the entire test_data directory is the public/ folder.
expect(rails_double).to receive(:application).and_return(nil)
expect(rails_double).to receive(:public_path).and_return(rails_public_test_data_path)
expect(loader).to receive(:_rails).at_least(:once).and_return(rails_double)
end
it 'includes files from the public folder (non-asset-pipeline)' do
+ setup_rails_double
resources = loader.build_resources
# Weak test that more things are in this list, because it merges asset pipeline with public.
expect(resources.length).to be > 5
resource_urls = resources.map(&:resource_url)
expect(resource_urls).to include('/assets/images/bg-relative.png') # From asset pipeline.
expect(resource_urls).to include('/percy-from-public.svg') # Public merged into root.
expect(resource_urls).to include('/symlink_to_images/test.png') # Symlink in public dir.
- expect(resource_urls).not_to include('/large-file-skipped.png') # Public merged into root.
+ expect(resource_urls).to_not include('/large-file-skipped.png') # Public merged into root.
end
context 'digest enabled' do
let(:digest_enabled) { true }
it 'only includes pre-compiled, digested files once' do
# This makes sure that we correctly merge already-compiled files in the assets directory
# with ones from the asset pipeline. This means that Rails users who have
# `config.assets.digest = true` set can safely run "rake assets:precompile" before tests.
+ setup_rails_double
resources = loader.build_resources
expected_digest_url = \
'/assets/css/digested-f3420c6aee71c137a3ca39727052811bae84b2f37' \
'd898f4db242e20656a1579e.css'
digested_resources = resources.select { |r| r.resource_url == expected_digest_url }