1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
|
# frozen_string_literal: true
RSpec.describe QA::Page::View do
let(:element) do
double('element', name: :something, pattern: /some element/)
end
subject { described_class.new('some/file.html', [element]) }
describe '.evaluate' do
it 'evaluates a block and returns a DSL object' do
results = described_class.evaluate do
element :something
element :something_else
end
expect(results.elements.size).to eq 2
end
end
describe '#pathname' do
it 'returns an absolute and clean path to the view' do
expect(subject.pathname.to_s).not_to include 'qa/page/'
expect(subject.pathname.to_s).to include 'some/file.html'
end
end
describe '#errors' do
context 'when view partial is present' do
before do
allow(subject.pathname).to receive(:readable?)
.and_return(true)
end
context 'when pattern is found' do
before do
allow(::File).to receive(:foreach)
.and_yield('some element').once
allow(element).to receive(:matches?)
.with('some element').and_return(true)
end
it 'walks through the view and asserts on elements existence' do
expect(subject.errors).to be_empty
end
end
context 'when pattern has not been found' do
before do
allow(::File).to receive(:foreach)
.and_yield('some element').once
allow(element).to receive(:matches?)
.with('some element').and_return(false)
end
it 'returns an array of errors related to missing elements' do
expect(subject.errors).not_to be_empty
expect(subject.errors.first)
.to match %r{Missing element `.*` in `.*/some/file.html` view}
end
end
end
context 'when view partial has not been found' do
it 'returns an error when it is not able to find the partial' do
expect(subject.errors).to be_one
expect(subject.errors.first)
.to match %r{Missing view partial `.*/some/file.html`!}
end
end
end
end
|