/
minitest_spec_spec.rb
152 lines (125 loc) · 4.6 KB
/
minitest_spec_spec.rb
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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
# frozen_string_literal: true
require 'spec_helper'
require 'capybara/minitest'
require 'capybara/minitest/spec'
class MinitestSpecTest < Minitest::Spec
include ::Capybara::DSL
include ::Capybara::Minitest::Assertions
before do
visit('/form')
end
after do
Capybara.reset_sessions!
end
it 'supports text expectations' do
page.must_have_text('Form', minimum: 1)
page.wont_have_text('Not a form')
form = find(:css, 'form', text: 'Title')
form.must_have_text('Customer Email')
form.wont_have_text('Some other email')
end
it 'supports current_path expectations' do
page.must_have_current_path('/form')
page.wont_have_current_path('/form2')
end
it 'supports title expectations' do
visit('/with_title')
page.must_have_title('Test Title')
page.wont_have_title('Not the title')
end
it 'supports xpath expectations' do
page.must_have_xpath('.//input[@id="customer_email"]')
page.wont_have_xpath('.//select[@id="not_form_title"]')
page.wont_have_xpath('.//input[@id="customer_email"]') { |el| el[:id] == 'not_customer_email' }
select = find(:select, 'form_title')
select.must_have_xpath('.//option[@class="title"]')
select.must_have_xpath('.//option', count: 1) { |option| option[:class] != 'title' && !option.disabled? }
select.wont_have_xpath('.//input[@id="customer_email"]')
end
it 'support css expectations' do
page.must_have_css('input#customer_email')
page.wont_have_css('select#not_form_title')
el = find(:select, 'form_title')
el.must_have_css('option.title')
el.wont_have_css('input#customer_email')
end
it 'supports link expectations' do
visit('/with_html')
page.must_have_link('A link')
page.wont_have_link('Not on page')
end
it 'supports button expectations' do
page.must_have_button('fresh_btn')
page.wont_have_button('not_btn')
end
it 'supports field expectations' do
page.must_have_field('customer_email')
page.wont_have_field('not_on_the_form')
end
it 'supports select expectations' do
page.must_have_select('form_title')
page.wont_have_select('not_form_title')
end
it 'supports checked_field expectations' do
page.must_have_checked_field('form_pets_dog')
page.wont_have_checked_field('form_pets_cat')
end
it 'supports unchecked_field expectations' do
page.must_have_unchecked_field('form_pets_cat')
page.wont_have_unchecked_field('form_pets_dog')
end
it 'supports table expectations' do
visit('/tables')
page.must_have_table('agent_table')
page.wont_have_table('not_on_form')
end
it 'supports all_of_selectors expectations' do
page.must_have_all_of_selectors(:css, 'select#form_other_title', 'input#form_last_name')
end
it 'supports none_of_selectors expectations' do
page.must_have_none_of_selectors(:css, 'input#not_on_page', 'input#also_not_on_page')
end
it 'supports any_of_selectors expectations' do
page.must_have_any_of_selectors(:css, 'select#form_other_title', 'input#not_on_page')
end
it 'supports match_selector expectations' do
find(:field, 'customer_email').must_match_selector(:field, 'customer_email')
find(:select, 'form_title').wont_match_selector(:field, 'customer_email')
end
it 'supports match_css expectations' do
find(:select, 'form_title').must_match_css('select#form_title')
find(:select, 'form_title').wont_match_css('select#form_other_title')
end
it 'supports match_xpath expectations' do
find(:select, 'form_title').must_match_xpath('.//select[@id="form_title"]')
find(:select, 'form_title').wont_match_xpath('.//select[@id="not_on_page"]')
end
it 'handles failures' do
page.must_have_select('non_existing_form_title')
end
it 'supports style expectations' do
skip "Rack test doesn't support style" if Capybara.current_driver == :rack_test
visit('/with_html')
find(:css, '#second').must_have_style('display' => 'inline') # deprecated
find(:css, '#second').must_match_style('display' => 'inline')
end
end
RSpec.describe 'capybara/minitest/spec' do
before do
Capybara.current_driver = :rack_test
Capybara.app = TestApp
end
after do
Capybara.use_default_driver
end
it 'should support minitest spec' do
output = StringIO.new
reporter = Minitest::SummaryReporter.new(output)
reporter.start
MinitestSpecTest.run reporter, {}
reporter.report
expect(output.string).to include('20 runs, 42 assertions, 1 failures, 0 errors, 1 skips')
# Make sure error messages are displayed
expect(output.string).to match(/expected to find select box "non_existing_form_title" .*but there were no matches/)
end
end