cornucopia 0.1.16 → 0.1.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +134 -5
- data/lib/cornucopia/capybara/finder_diagnostics.rb +5 -1
- data/lib/cornucopia/cucumber_hooks.rb +5 -1
- data/lib/cornucopia/rspec_hooks.rb +5 -1
- data/lib/cornucopia/spinach_hooks.rb +5 -1
- data/lib/cornucopia/util/configuration.rb +320 -280
- data/lib/cornucopia/util/file_asset.rb +14 -3
- data/lib/cornucopia/version.rb +1 -1
- data/spec/lib/util/configuration_spec.rb +57 -5
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c605a3ac693c8cfb36d7f52304456400d1b2e766
|
4
|
+
data.tar.gz: 690678034748ce8f86ba8f2642dca2a4e5cf22b7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0b71eb0bc8f122c07036cd021f662fed6525242570c187690d4ffac02ea038ce29c7b782e7279eecffdabeb9995d941d1c7b344498318adc57c442409c7bfa89
|
7
|
+
data.tar.gz: 288f628863535d59af56d50af116e238aefc95f7020111135c093677d96a24937c45629bea64224271e56b4f89d4d59be2d21d9b251899bb1b7f0e747db53cdd
|
data/README.md
CHANGED
@@ -65,7 +65,9 @@ I have added the following functions to Capybara to help simplify using it.
|
|
65
65
|
|
66
66
|
* synchronize_test(seconds=Capybara.default_wait_time, options = {}, &block)
|
67
67
|
|
68
|
-
This function yields to a block until the Capybara timeout occurs or the block returns true.
|
68
|
+
This function yields to a block until the Capybara timeout occurs or the block returns true. I added it because I
|
69
|
+
find that simple synchronized find functions are not always sufficient. This will allow the system to wait till any
|
70
|
+
random block returns true, synchronizing to a wide variety of conditions.
|
69
71
|
|
70
72
|
# Wait until either #some_element or #another_element exists.
|
71
73
|
Capybara::current_session.synchronize_test do
|
@@ -78,13 +80,20 @@ This function yields to a block until the Capybara timeout occurs or the block r
|
|
78
80
|
This function selects the option from a select box based on the value for the selected option instead of the
|
79
81
|
value string.
|
80
82
|
|
83
|
+
If I have the a SELECT list with the following option:
|
84
|
+
|
85
|
+
<option value="AZ">Arizona</option>
|
86
|
+
|
87
|
+
The following line will select the "Arizona" option:
|
88
|
+
|
89
|
+
my_address.state_abbreviation = "AZ"
|
81
90
|
page.find("#state_selector").select_value(my_address.state_abbreviation)
|
82
91
|
|
83
92
|
* **value_text**
|
84
93
|
|
85
94
|
This function returns the string value of the currently selected option(s).
|
86
95
|
|
87
|
-
page.find("#state_selector").value_text # returns "Arizona" instead of "AZ"
|
96
|
+
page.find("#state_selector").value_text # returns "Arizona" instead of "AZ" if "AZ" is selected.
|
88
97
|
|
89
98
|
### SitePrism
|
90
99
|
|
@@ -232,7 +241,7 @@ automatically as long as I follow some simple rules.
|
|
232
241
|
Basically, just create all of my pages underneath a single module in a single folder, and the a class derived from
|
233
242
|
PageApplication will find the pages and memoize them for you automatically.
|
234
243
|
|
235
|
-
class
|
244
|
+
class MyPageApplication < Cornucopia::SitePrism::PageApplication
|
236
245
|
def pages_module
|
237
246
|
MyPagesModule
|
238
247
|
end
|
@@ -252,8 +261,32 @@ PageApplication will find the pages and memoize them for you automatically.
|
|
252
261
|
end
|
253
262
|
end
|
254
263
|
|
255
|
-
a_memoized_page =
|
256
|
-
a_memoized_other_page =
|
264
|
+
a_memoized_page = MyPageApplication.my_module__my_page
|
265
|
+
a_memoized_other_page = MyPageApplication.my_other_page
|
266
|
+
|
267
|
+
#### Capybara::Node::Simple integration
|
268
|
+
|
269
|
+
SitePrism is very useful, but it only works with the main page: `Capybara::current_session.page`. I have found that
|
270
|
+
there are times where it is very useful to use the `Capybara::Node::Simple` object. The problem I have is that I can't
|
271
|
+
use my SitePrism pages with the SimpleNode.
|
272
|
+
|
273
|
+
I therefore added a property `owner_node` to the `SitePrism::Page` and `SitePrism::Section` classes. You can assign
|
274
|
+
to this property the `Capybara::Node` that you want to execute the finder functions against.
|
275
|
+
|
276
|
+
An example might be something like:
|
277
|
+
|
278
|
+
RSpec.describe MyController, type: :controller do
|
279
|
+
get :index
|
280
|
+
|
281
|
+
expect(response.status).to eq 200
|
282
|
+
|
283
|
+
my_node = Capybara::Node::Simple.new(response.body)
|
284
|
+
my_page = MyPageApplication.my_page
|
285
|
+
|
286
|
+
my_page.owner_node = my_node
|
287
|
+
|
288
|
+
expect(my_page.my_section.my_list[0].my_element.text).to eq(my_expectation)
|
289
|
+
end
|
257
290
|
|
258
291
|
### Utilities
|
259
292
|
|
@@ -350,6 +383,102 @@ The configuration class contains the various configurations that are used by the
|
|
350
383
|
The `Cornucopia::Util::ConfiguredReport` class allows you to configure what information is exported to generated
|
351
384
|
report files.
|
352
385
|
|
386
|
+
I've tried to create reasonable default configuration for what gets reported when there is an error in the test
|
387
|
+
environments that I know enough to support: Cucumber, RSpec, and Spinach. I also provided a default configuration
|
388
|
+
for what to report when an error occurs a Capybara page is open.
|
389
|
+
|
390
|
+
You can override these defaults if you find a need and specify the configured report that is used when an exception
|
391
|
+
occurs in a particular environment.
|
392
|
+
|
393
|
+
The default configurations will output the following information that it can find/is available:
|
394
|
+
|
395
|
+
* The exception that caused the problem and its call stack
|
396
|
+
* Test details such as the test name, file path, etc.
|
397
|
+
* Any instance variables for the test
|
398
|
+
* Any values defined using `let`
|
399
|
+
* The log for the current environment
|
400
|
+
* Any additional log files specified by the user
|
401
|
+
* Any Capybara details that can be determined like the HTML source, a screen shot, etc.
|
402
|
+
|
403
|
+
The ConfiguredReport class and the example configurations detail how the configured reports work if you feel the need
|
404
|
+
to create your own.
|
405
|
+
|
406
|
+
#### ReportBuilder
|
407
|
+
|
408
|
+
The ReportBuilder is the tool which is used to create the reports that are generated when an exception is caught.
|
409
|
+
There are 3 basic objects to work with in a report:
|
410
|
+
|
411
|
+
##### Tests
|
412
|
+
|
413
|
+
A test is basically a new sub-report. When you create a new test, you will pass in a name for the test. This name
|
414
|
+
will appear in the left portion of the report. When the user clicks on the test, the report for the test will appear
|
415
|
+
on the right side. You will likely not need to create your own tests. To do so, you call `within_test`.
|
416
|
+
|
417
|
+
An example:
|
418
|
+
|
419
|
+
Cornucopia::ReportBuilder.current_report.within_test("This is the name of my test") do
|
420
|
+
# build your test report here.
|
421
|
+
end
|
422
|
+
|
423
|
+
##### Sections
|
424
|
+
|
425
|
+
A section is a block within a test. The section has a header that describes the section and is the primary container
|
426
|
+
for tables. Multiple sections are allowed within a test and are colored alternating colors to distinguish them.
|
427
|
+
|
428
|
+
An example:
|
429
|
+
|
430
|
+
Cornucopia::ReportBuilder.current_report.within_section("Section header") do |section|
|
431
|
+
# Build the details for the section here.
|
432
|
+
|
433
|
+
# NOTE: Currently section is == Cornucopia::ReportBuilder.current_report This may or may not be so in the
|
434
|
+
# future.
|
435
|
+
end
|
436
|
+
|
437
|
+
Note that only one test is allowed to be active at all times and that if no other test is active a defaut "unknown"
|
438
|
+
test will be used. As a result, you can call the `within_section` function directly from the report object and it
|
439
|
+
will be within the currently active test.
|
440
|
+
|
441
|
+
##### Tables
|
442
|
+
|
443
|
+
A table is exactly what it sounds like it is a table of information. Tables have rows of information pairs - a label
|
444
|
+
and the information to be shown. Unlike Sections and Tests, Tables can be nested inside each other. That is the
|
445
|
+
information in a table row can be another table.
|
446
|
+
|
447
|
+
If the information for a particular cell is too large, that information will be partially hidden from view so that
|
448
|
+
the table size doesn't get out of hand.
|
449
|
+
|
450
|
+
To write out a value, you simply use `write_stats` and pass in a label and a value.
|
451
|
+
|
452
|
+
An example:
|
453
|
+
|
454
|
+
Cornucopia::ReportBuilder.current_report.within_section("Section header") do |section|
|
455
|
+
section.within_table do |table|
|
456
|
+
table.write_stats "Statistic name", "Statistic value"
|
457
|
+
|
458
|
+
ReportTable.new nested_table: table, nested_table_label: "Sub Table" do |sub_table|
|
459
|
+
sub_table.write_stats "Sub statistic name", "Sub statistic value"
|
460
|
+
end
|
461
|
+
end
|
462
|
+
end
|
463
|
+
|
464
|
+
Tables have a lot of options:
|
465
|
+
|
466
|
+
* **table_prefix** - This is the value to use to "open" the table.
|
467
|
+
* **table_postfix** - This is the value to use to "close" the table.
|
468
|
+
* **report_table** - If set, all table calls are passed through to this table object. The purpose of this value is
|
469
|
+
to allow for an optional sub-table. That is the code acts as if it is working on a sub-table, but in reality it is
|
470
|
+
working in the report_table.
|
471
|
+
* **nested_table** - This is the table that the table being created will be a sub-table of. When the new table is
|
472
|
+
completed, it till be output into a row of the specified table.
|
473
|
+
* **nested_table_label** - This is the lable that will be used for this table when it is output in the nested_table.
|
474
|
+
* **nested_table_options** - A hash of options that will be used to determine the look and feel of the nested table
|
475
|
+
when it is output. These options are passed into write_stats when the table is output.
|
476
|
+
* **not_a_table** - If set, then when write_stats is called, the label value is ignored and the value is simply
|
477
|
+
appended to the table as-is.
|
478
|
+
* **suppress_blank_table** - If set, the table will not be output if it is blank.
|
479
|
+
|
480
|
+
|
481
|
+
|
353
482
|
## Contributing
|
354
483
|
|
355
484
|
1. Fork it
|
@@ -79,9 +79,13 @@ module Cornucopia
|
|
79
79
|
class FindAction
|
80
80
|
@@diagnosed_finders = {}
|
81
81
|
|
82
|
+
Cornucopia::Util::ReportBuilder.on_close do
|
83
|
+
Cornucopia::Capybara::FinderDiagnostics::FindAction.clear_diagnosed_finders
|
84
|
+
end
|
85
|
+
|
82
86
|
# Clears the class variable @@diagnosed_finders between tests if called.
|
83
87
|
# This is done so that finder analysis is called at least once per test.
|
84
|
-
def self.
|
88
|
+
def self.clear_diagnosed_finders
|
85
89
|
@@diagnosed_finders = {}
|
86
90
|
end
|
87
91
|
|
@@ -8,7 +8,8 @@ Around do |scenario, block|
|
|
8
8
|
|
9
9
|
scenario.instance_variable_set :@seed_value, seed_value
|
10
10
|
|
11
|
-
Cornucopia::Capybara::FinderDiagnostics::FindAction.
|
11
|
+
Cornucopia::Capybara::FinderDiagnostics::FindAction.clear_diagnosed_finders
|
12
|
+
Cornucopia::Capybara::PageDiagnostics.clear_dumped_pages
|
12
13
|
|
13
14
|
Cornucopia::Util::ReportBuilder.current_report.within_test("#{scenario.feature.title} : #{scenario.title}") do
|
14
15
|
block.call
|
@@ -18,6 +19,9 @@ Around do |scenario, block|
|
|
18
19
|
seed_value = scenario.instance_variable_get(:@seed_value)
|
19
20
|
puts ("random seed for testing was: #{seed_value}")
|
20
21
|
end
|
22
|
+
|
23
|
+
Cornucopia::Capybara::FinderDiagnostics::FindAction.clear_diagnosed_finders
|
24
|
+
Cornucopia::Capybara::PageDiagnostics.clear_dumped_pages
|
21
25
|
end
|
22
26
|
|
23
27
|
After do |scenario|
|
@@ -20,7 +20,8 @@ RSpec.configure do |config|
|
|
20
20
|
|
21
21
|
srand(@seed_value)
|
22
22
|
|
23
|
-
Cornucopia::Capybara::FinderDiagnostics::FindAction.
|
23
|
+
Cornucopia::Capybara::FinderDiagnostics::FindAction.clear_diagnosed_finders
|
24
|
+
Cornucopia::Capybara::PageDiagnostics.clear_dumped_pages
|
24
25
|
|
25
26
|
test_example = example.example if example.respond_to?(:example)
|
26
27
|
test_example ||= self.example if self.respond_to?(:example)
|
@@ -40,5 +41,8 @@ RSpec.configure do |config|
|
|
40
41
|
end
|
41
42
|
end
|
42
43
|
end
|
44
|
+
|
45
|
+
Cornucopia::Capybara::FinderDiagnostics::FindAction.clear_diagnosed_finders
|
46
|
+
Cornucopia::Capybara::PageDiagnostics.clear_dumped_pages
|
43
47
|
end
|
44
48
|
end
|
@@ -15,11 +15,15 @@ Spinach.hooks.before_scenario do |scenario, step_definitions|
|
|
15
15
|
|
16
16
|
scenario.instance_variable_set :@seed_value, seed_value
|
17
17
|
|
18
|
-
Cornucopia::Capybara::FinderDiagnostics::FindAction.
|
18
|
+
Cornucopia::Capybara::FinderDiagnostics::FindAction.clear_diagnosed_finders
|
19
|
+
Cornucopia::Capybara::PageDiagnostics.clear_dumped_pages
|
19
20
|
end
|
20
21
|
|
21
22
|
Spinach.hooks.after_scenario do |scenario, step_definitions|
|
22
23
|
@running_scenario = nil
|
24
|
+
|
25
|
+
Cornucopia::Capybara::FinderDiagnostics::FindAction.clear_diagnosed_finders
|
26
|
+
Cornucopia::Capybara::PageDiagnostics.clear_dumped_pages
|
23
27
|
end
|
24
28
|
|
25
29
|
Spinach.hooks.on_failed_step do |step_data, exception, location, step_definitions|
|
@@ -1,3 +1,4 @@
|
|
1
|
+
require "singleton"
|
1
2
|
require ::File.expand_path('configured_report', File.dirname(__FILE__))
|
2
3
|
require ::File.expand_path('generic_settings', File.dirname(__FILE__))
|
3
4
|
require ::File.expand_path('report_formatters', File.dirname(__FILE__))
|
@@ -5,254 +6,263 @@ require ::File.expand_path('report_formatters', File.dirname(__FILE__))
|
|
5
6
|
module Cornucopia
|
6
7
|
module Util
|
7
8
|
class Configuration
|
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
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
9
|
+
include Singleton
|
10
|
+
|
11
|
+
attr_accessor :configurations
|
12
|
+
|
13
|
+
def initialize
|
14
|
+
@configurations = Cornucopia::Util::GenericSettings.new
|
15
|
+
|
16
|
+
configurations.order_seed = nil
|
17
|
+
configurations.rand_seed = nil
|
18
|
+
configurations.user_log_files = {}
|
19
|
+
configurations.default_num_lines = 500
|
20
|
+
configurations.grab_logs = true
|
21
|
+
configurations.print_timeout_min = 10
|
22
|
+
configurations.selenium_cache_retry_count = 5
|
23
|
+
configurations.analyze_find_exceptions = true
|
24
|
+
configurations.analyze_selector_exceptions = true
|
25
|
+
configurations.retry_with_found = false
|
26
|
+
configurations.retry_match_with_found = false
|
27
|
+
configurations.open_report_settings = { default: false }
|
28
|
+
configurations.base_folder = "cornucopia_report"
|
29
|
+
|
30
|
+
# configurations.alternate_retry = false
|
31
|
+
|
32
|
+
configurations.default_configuration = {
|
33
|
+
rspec: {
|
34
|
+
min_fields: [
|
35
|
+
:example__full_description,
|
36
|
+
:example__location,
|
37
|
+
:example__exception__to_s,
|
38
|
+
:example__exception__backtrace
|
39
|
+
],
|
40
|
+
more_info_fields: [
|
41
|
+
:example__exception__class__name,
|
42
|
+
:example,
|
43
|
+
:example__example_group_instance,
|
44
|
+
:example__metadata__caller,
|
45
|
+
:rspec__configuration__seed,
|
46
|
+
:logs,
|
47
|
+
:capybara_page_diagnostics
|
48
|
+
],
|
49
|
+
expand_fields: [
|
50
|
+
:example,
|
51
|
+
:example__example_group_instance__response,
|
52
|
+
:example__example_group_instance__controller,
|
53
|
+
:example__example_group_instance__request,
|
54
|
+
:example__example_group_instance
|
55
|
+
],
|
56
|
+
expand_inline_fields: [
|
57
|
+
:example__example_group_instance____memoized
|
58
|
+
],
|
59
|
+
exclude_fields: [
|
60
|
+
:example__fixture_connections,
|
61
|
+
:example,
|
62
|
+
:example__example_group_instance,
|
63
|
+
]
|
64
|
+
},
|
65
|
+
cucumber: {
|
66
|
+
min_fields: [
|
67
|
+
{
|
68
|
+
report_element: :scenario__feature__title,
|
69
|
+
report_options: { label: "feature" }
|
70
|
+
},
|
71
|
+
{
|
72
|
+
report_element: :scenario__feature__location,
|
73
|
+
# report_options: { format: ->(value) { "#{value.file}:#{value.line}" } }
|
74
|
+
report_options: { format_object: Cornucopia::Util::CucumberFormatter,
|
75
|
+
format_function: :format_location }
|
76
|
+
},
|
77
|
+
{
|
78
|
+
report_element: :scenario__title,
|
79
|
+
report_options: { label: "scenario" }
|
80
|
+
},
|
81
|
+
{
|
82
|
+
report_element: :scenario__location,
|
83
|
+
report_options: { format_object: Cornucopia::Util::CucumberFormatter,
|
84
|
+
format_function: :format_location }
|
85
|
+
},
|
86
|
+
:scenario__exception__to_s,
|
87
|
+
:scenario__exception__backtrace
|
88
|
+
],
|
89
|
+
more_info_fields: [
|
90
|
+
:scenario__exception__class__name,
|
91
|
+
:scenario,
|
92
|
+
:scenario__feature__comment,
|
93
|
+
:scenario__feature__keyword,
|
94
|
+
:scenario__feature__description,
|
95
|
+
:scenario__feature__gherkin_statement,
|
96
|
+
:scenario__feature__tags,
|
97
|
+
:scenario__current_visitor__configuration,
|
98
|
+
:cucumber,
|
99
|
+
:logs,
|
100
|
+
:capybara_page_diagnostics
|
101
|
+
],
|
102
|
+
expand_fields: [
|
103
|
+
:scenario,
|
104
|
+
:cucumber,
|
105
|
+
],
|
106
|
+
expand_inline_fields: [
|
107
|
+
],
|
108
|
+
exclude_fields: [
|
109
|
+
:scenario__background,
|
110
|
+
:scenario__feature,
|
111
|
+
:scenario__current_visitor,
|
112
|
+
:scenario__raw_steps,
|
113
|
+
:scenario__title,
|
114
|
+
:scenario__location,
|
115
|
+
:cucumber____cucumber_runtime,
|
116
|
+
:cucumber____natural_language,
|
117
|
+
:cucumber___rack_test_sessions,
|
118
|
+
:cucumber___rack_mock_sessions,
|
119
|
+
:cucumber__integration_session
|
120
|
+
]
|
121
|
+
},
|
122
|
+
spinach: {
|
123
|
+
min_fields: [
|
124
|
+
:failure_description,
|
125
|
+
:running_scenario__feature__name,
|
126
|
+
:running_scenario__name,
|
127
|
+
:running_scenario__line,
|
128
|
+
:step_data__name,
|
129
|
+
:step_data__line,
|
130
|
+
:exception__to_s,
|
131
|
+
:exception__backtrace
|
132
|
+
],
|
133
|
+
more_info_fields: [
|
134
|
+
:exception__class__name,
|
135
|
+
:running_scenario__feature__tags,
|
136
|
+
:running_scenario,
|
137
|
+
:step_data,
|
138
|
+
:step_definitions,
|
139
|
+
:logs,
|
140
|
+
:capybara_page_diagnostics
|
141
|
+
],
|
142
|
+
expand_fields: [
|
143
|
+
:running_scenario,
|
144
|
+
:step_data,
|
145
|
+
:step_definitions
|
146
|
+
],
|
147
|
+
expand_inline_fields: [
|
148
|
+
],
|
149
|
+
exclude_fields: [
|
150
|
+
:running_scenario__feature,
|
151
|
+
:step_data__scenario__feature,
|
152
|
+
:running_scenario__name,
|
153
|
+
:running_scenario__line,
|
154
|
+
:step_data__name,
|
155
|
+
:step_data__line
|
156
|
+
]
|
157
|
+
},
|
158
|
+
capybara_page_diagnostics: {
|
159
|
+
min_fields: [
|
160
|
+
:capybara__page_url,
|
161
|
+
:capybara__title,
|
162
|
+
:capybara__screen_shot
|
163
|
+
],
|
164
|
+
more_info_fields: [
|
165
|
+
:capybara,
|
166
|
+
:capybara__other_windows,
|
167
|
+
],
|
168
|
+
expand_fields: [
|
169
|
+
:capybara,
|
170
|
+
:capybara__other_windows,
|
171
|
+
"capybara__other_windows__*",
|
172
|
+
],
|
173
|
+
expand_inline_fields: [
|
174
|
+
:capybara,
|
175
|
+
],
|
176
|
+
exclude_fields: [
|
177
|
+
:capybara__page_url,
|
178
|
+
:capybara__title,
|
179
|
+
:capybara__screen_shot,
|
180
|
+
:capybara__page_url,
|
181
|
+
:capybara__title,
|
182
|
+
:capybara__screen_shot,
|
183
|
+
:capybara__options,
|
184
|
+
:capybara__report,
|
185
|
+
:capybara__table,
|
186
|
+
:capybara__unsupported_list,
|
187
|
+
:capybara__allow_other_windows,
|
188
|
+
:capybara__iterating,
|
189
|
+
:capybara__session,
|
190
|
+
:capybara__driver,
|
191
|
+
:capybara__window_handles,
|
192
|
+
:capybara__current_window,
|
193
|
+
"capybara__other_windows__*__options",
|
194
|
+
"capybara__other_windows__*__report",
|
195
|
+
"capybara__other_windows__*__table",
|
196
|
+
"capybara__other_windows__*__unsupported_list",
|
197
|
+
"capybara__other_windows__*__allow_other_windows",
|
198
|
+
"capybara__other_windows__*__iterating",
|
199
|
+
"capybara__other_windows__*__session",
|
200
|
+
"capybara__other_windows__*__driver",
|
201
|
+
"capybara__other_windows__*__window_handles",
|
202
|
+
"capybara__other_windows__*__current_window"
|
203
|
+
],
|
204
|
+
leaf_options: [
|
205
|
+
{ report_element: [:html_source,
|
206
|
+
:html_frame,
|
207
|
+
:screen_shot
|
208
|
+
],
|
209
|
+
report_options: { prevent_shrink: true,
|
210
|
+
exclude_code_block: true,
|
211
|
+
do_not_pretty_print: true
|
212
|
+
}
|
213
|
+
},
|
214
|
+
{ report_element: [:html_file],
|
215
|
+
report_options: { exclude_code_block: true },
|
205
216
|
}
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
}
|
217
|
+
]
|
218
|
+
},
|
219
|
+
capybara_finder_diagnostics: {
|
220
|
+
min_fields: [
|
221
|
+
:finder__function_name,
|
222
|
+
:finder__args__0,
|
223
|
+
:finder__search_args,
|
224
|
+
:finder__options,
|
225
|
+
:exception__to_s,
|
226
|
+
:exception__backtrace
|
227
|
+
],
|
228
|
+
more_info_fields: [
|
229
|
+
:exception__class__name,
|
230
|
+
:finder,
|
231
|
+
:capybara_page_diagnostics
|
232
|
+
],
|
233
|
+
expand_fields: [
|
234
|
+
:finder,
|
235
|
+
:finder__args,
|
236
|
+
:finder__all_elements,
|
237
|
+
:finder__all_other_elements,
|
238
|
+
"finder__all_elements__*",
|
239
|
+
"finder__all_other_elements__*",
|
240
|
+
"finder__all_elements__*__native_size",
|
241
|
+
"finder__all_other_elements__*__native_size",
|
242
|
+
"finder__all_elements__*__elem_location",
|
243
|
+
"finder__all_other_elements__*__elem_location",
|
244
|
+
:finder__search_args,
|
245
|
+
:finder__options
|
246
|
+
],
|
247
|
+
expand_inline_fields: [
|
248
|
+
:finder
|
249
|
+
],
|
250
|
+
exclude_fields: [
|
251
|
+
:finder__return_value,
|
252
|
+
:finder__function_name,
|
253
|
+
:finder__args__0,
|
254
|
+
:finder__search_args,
|
255
|
+
:finder__options,
|
256
|
+
:finder__report_options,
|
257
|
+
:finder__test_object,
|
258
|
+
"finder__all_elements__*__found_element",
|
259
|
+
"finder__all_other_elements__*__found_element"
|
260
|
+
]
|
261
|
+
}
|
262
|
+
}
|
263
|
+
|
264
|
+
configurations.configured_reports = {}
|
265
|
+
end
|
256
266
|
|
257
267
|
class << self
|
258
268
|
# rand_seed is the seed value used to seed the srand function at the start of a test
|
@@ -262,24 +272,24 @@ module Cornucopia
|
|
262
272
|
# and run the test again. This should re-run the exact same test, resulting in a
|
263
273
|
# repeatable test even with randomization in it.
|
264
274
|
def seed=(value)
|
265
|
-
|
275
|
+
Cornucopia::Util::Configuration.instance.configurations.rand_seed = value
|
266
276
|
srand(value) if value
|
267
277
|
end
|
268
278
|
|
269
279
|
def seed
|
270
|
-
|
280
|
+
Cornucopia::Util::Configuration.instance.configurations.rand_seed
|
271
281
|
end
|
272
282
|
|
273
283
|
# order_seed is the seed value used to set the order that randomly ordered tests are run in.
|
274
284
|
# This is provided as a convenience method. I think it is easier to set this in rails_helper than it is to
|
275
285
|
# set it on the command line. This also provides a uniform method to do it.
|
276
286
|
def order_seed=(value)
|
277
|
-
|
278
|
-
RSpec.configuration.seed
|
287
|
+
Cornucopia::Util::Configuration.instance.configurations.order_seed = value
|
288
|
+
RSpec.configuration.seed = value if value
|
279
289
|
end
|
280
290
|
|
281
291
|
def order_seed
|
282
|
-
|
292
|
+
Cornucopia::Util::Configuration.instance.configurations.order_seed
|
283
293
|
end
|
284
294
|
|
285
295
|
# grab_logs indicates if the system should try to automatically grab a tail of
|
@@ -299,11 +309,11 @@ module Cornucopia
|
|
299
309
|
# add_log_file
|
300
310
|
# remove_log_file
|
301
311
|
def grab_logs=(value)
|
302
|
-
|
312
|
+
Cornucopia::Util::Configuration.instance.configurations.grab_logs = value
|
303
313
|
end
|
304
314
|
|
305
315
|
def grab_logs
|
306
|
-
|
316
|
+
Cornucopia::Util::Configuration.instance.configurations.grab_logs
|
307
317
|
end
|
308
318
|
|
309
319
|
# user_log_files returns a hash of all of the log files which
|
@@ -313,19 +323,20 @@ module Cornucopia
|
|
313
323
|
# grabbed, and the values are the options specified for the
|
314
324
|
# files. The values may be an empty hash.
|
315
325
|
def user_log_files
|
316
|
-
|
326
|
+
Cornucopia::Util::Configuration.instance.configurations.user_log_files.clone
|
317
327
|
end
|
318
328
|
|
319
329
|
# num_lines returns the number of lines that will be grabbed
|
320
330
|
# for a file. If no file name is supplied, or the name does not match a
|
321
331
|
# user file, the default log length will returned.
|
322
332
|
def num_lines(log_file_name=nil)
|
323
|
-
|
333
|
+
Cornucopia::Util::Configuration.instance.configurations.user_log_files[log_file_name].try(:[], :num_lines) ||
|
334
|
+
Cornucopia::Util::Configuration.instance.configurations.default_num_lines
|
324
335
|
end
|
325
336
|
|
326
337
|
# default_num_lines sets the default number of lines to extract from the log file
|
327
338
|
def default_num_lines=(value)
|
328
|
-
|
339
|
+
Cornucopia::Util::Configuration.instance.configurations.default_num_lines = value
|
329
340
|
end
|
330
341
|
|
331
342
|
# Adds the specified log file to the list of log files to capture.
|
@@ -333,14 +344,15 @@ module Cornucopia
|
|
333
344
|
# the existing options.
|
334
345
|
# See Cornucopia::LogCapture
|
335
346
|
def add_log_file(log_file_name, options = {})
|
336
|
-
|
337
|
-
|
347
|
+
Cornucopia::Util::Configuration.instance.configurations.user_log_files[log_file_name] ||= {}
|
348
|
+
Cornucopia::Util::Configuration.instance.configurations.user_log_files[log_file_name] =
|
349
|
+
Cornucopia::Util::Configuration.instance.configurations.user_log_files[log_file_name].merge options
|
338
350
|
end
|
339
351
|
|
340
352
|
# Removes the specified log file from the list of log files to capture.
|
341
353
|
# NOTE: You cannot remove the default log file.
|
342
354
|
def remove_log_file(log_file_name)
|
343
|
-
|
355
|
+
Cornucopia::Util::Configuration.instance.configurations.user_log_files.delete log_file_name
|
344
356
|
end
|
345
357
|
|
346
358
|
# returns the report configuration object for that type of report
|
@@ -351,7 +363,35 @@ module Cornucopia
|
|
351
363
|
# :spinach
|
352
364
|
# :capybara_page_diagnostics
|
353
365
|
def report_configuration(report_name)
|
354
|
-
|
366
|
+
Cornucopia::Util::Configuration.instance.configurations.configured_reports[report_name] ||=
|
367
|
+
Cornucopia::Util::ConfiguredReport.new(Cornucopia::Util::Configuration.instance.configurations.default_configuration[report_name])
|
368
|
+
end
|
369
|
+
|
370
|
+
# sets the report configuration object for that type of report from a configuration has that is passed in
|
371
|
+
#
|
372
|
+
# values for report_name:
|
373
|
+
# :rspec
|
374
|
+
# :cucumber
|
375
|
+
# :spinach
|
376
|
+
# :capybara_page_diagnostics
|
377
|
+
def set_report_configuration(report_name, configuration)
|
378
|
+
if configuration.is_a?(Cornucopia::Util::ConfiguredReport)
|
379
|
+
Cornucopia::Util::Configuration.instance.configurations.configured_reports[report_name] = configuration
|
380
|
+
else
|
381
|
+
Cornucopia::Util::Configuration.instance.configurations.configured_reports[report_name] =
|
382
|
+
Cornucopia::Util::ConfiguredReport.new(configuration)
|
383
|
+
end
|
384
|
+
end
|
385
|
+
|
386
|
+
# returns the report configuration object for that type of report
|
387
|
+
#
|
388
|
+
# values for report_name:
|
389
|
+
# :rspec
|
390
|
+
# :cucumber
|
391
|
+
# :spinach
|
392
|
+
# :capybara_page_diagnostics
|
393
|
+
def default_report_configuration(report_name)
|
394
|
+
Cornucopia::Util::Configuration.instance.configurations.default_configuration[report_name].try :clone
|
355
395
|
end
|
356
396
|
|
357
397
|
# Sets or returns the minimum amount of time in seconds to allow for the printing of variables.
|
@@ -363,11 +403,11 @@ module Cornucopia
|
|
363
403
|
#
|
364
404
|
# Default: 10
|
365
405
|
def print_timeout_min
|
366
|
-
|
406
|
+
Cornucopia::Util::Configuration.instance.configurations.print_timeout_min
|
367
407
|
end
|
368
408
|
|
369
409
|
def print_timeout_min=(value)
|
370
|
-
|
410
|
+
Cornucopia::Util::Configuration.instance.configurations.print_timeout_min = value
|
371
411
|
end
|
372
412
|
|
373
413
|
# The Selenium driver can throw a StaleElementReferenceError exception sometimes.
|
@@ -385,11 +425,11 @@ module Cornucopia
|
|
385
425
|
# that I've run into a lot. I am doing it this way to see if I can reduce the
|
386
426
|
# the occurrence of it.
|
387
427
|
def selenium_cache_retry_count
|
388
|
-
|
428
|
+
Cornucopia::Util::Configuration.instance.configurations.selenium_cache_retry_count
|
389
429
|
end
|
390
430
|
|
391
431
|
def selenium_cache_retry_count=(value)
|
392
|
-
|
432
|
+
Cornucopia::Util::Configuration.instance.configurations.selenium_cache_retry_count = value
|
393
433
|
end
|
394
434
|
|
395
435
|
# This setting is used by the Capybara utilities.
|
@@ -398,11 +438,11 @@ module Cornucopia
|
|
398
438
|
# use the FinderDiagnostics to output some diagnostic information about the page and the finder
|
399
439
|
# to try to assist in determining what happened.
|
400
440
|
def analyze_find_exceptions
|
401
|
-
|
441
|
+
Cornucopia::Util::Configuration.instance.configurations.analyze_find_exceptions
|
402
442
|
end
|
403
443
|
|
404
444
|
def analyze_find_exceptions=(value)
|
405
|
-
|
445
|
+
Cornucopia::Util::Configuration.instance.configurations.analyze_find_exceptions = value
|
406
446
|
end
|
407
447
|
|
408
448
|
# This setting is used by the Capybara utilities.
|
@@ -411,11 +451,11 @@ module Cornucopia
|
|
411
451
|
# use the FinderDiagnostics to output some diagnostic information about the page and the
|
412
452
|
# selector to try to assist in determining what happened.
|
413
453
|
def analyze_selector_exceptions
|
414
|
-
|
454
|
+
Cornucopia::Util::Configuration.instance.configurations.analyze_selector_exceptions
|
415
455
|
end
|
416
456
|
|
417
457
|
def analyze_selector_exceptions=(value)
|
418
|
-
|
458
|
+
Cornucopia::Util::Configuration.instance.configurations.analyze_selector_exceptions = value
|
419
459
|
end
|
420
460
|
|
421
461
|
# Sometimes, the analysis process found the element when it wasn't found other ways.
|
@@ -426,11 +466,11 @@ module Cornucopia
|
|
426
466
|
# WARNING: Using this is unsafe. If you use it, you could get false positive
|
427
467
|
# results in your test.
|
428
468
|
def retry_with_found
|
429
|
-
|
469
|
+
Cornucopia::Util::Configuration.instance.configurations.retry_with_found
|
430
470
|
end
|
431
471
|
|
432
472
|
def retry_with_found=(value)
|
433
|
-
|
473
|
+
Cornucopia::Util::Configuration.instance.configurations.retry_with_found = value
|
434
474
|
end
|
435
475
|
|
436
476
|
# Sometimes, the analysis process found the element when it wasn't found other ways.
|
@@ -438,11 +478,11 @@ module Cornucopia
|
|
438
478
|
#
|
439
479
|
# The default is true because I have been getting a fair number of false negatives.
|
440
480
|
def retry_match_with_found
|
441
|
-
|
481
|
+
Cornucopia::Util::Configuration.instance.configurations.retry_match_with_found
|
442
482
|
end
|
443
483
|
|
444
484
|
def retry_match_with_found=(value)
|
445
|
-
|
485
|
+
Cornucopia::Util::Configuration.instance.configurations.retry_match_with_found = value
|
446
486
|
end
|
447
487
|
|
448
488
|
# To make it easier to know about and to see the reports, this configuration will cause a report to be
|
@@ -455,12 +495,12 @@ module Cornucopia
|
|
455
495
|
# "spinach_report"
|
456
496
|
|
457
497
|
def auto_open_report_after_generation(open_report, report_name = nil)
|
458
|
-
|
498
|
+
Cornucopia::Util::Configuration.instance.configurations.open_report_settings[report_name || :default] = open_report
|
459
499
|
end
|
460
500
|
|
461
501
|
def open_report_after_generation(report_name)
|
462
|
-
open_report =
|
463
|
-
open_report =
|
502
|
+
open_report = Cornucopia::Util::Configuration.instance.configurations.open_report_settings[report_name]
|
503
|
+
open_report = Cornucopia::Util::Configuration.instance.configurations.open_report_settings[:default] if open_report.nil?
|
464
504
|
open_report
|
465
505
|
end
|
466
506
|
|
@@ -484,22 +524,22 @@ module Cornucopia
|
|
484
524
|
# # WARNING: Using this is unsafe. If you use it, you could get false positive
|
485
525
|
# # results in your test.
|
486
526
|
# def alternate_retry
|
487
|
-
#
|
527
|
+
# Cornucopia::Util::Configuration.instance.configurations.alternate_retry
|
488
528
|
# end
|
489
529
|
#
|
490
530
|
# def alternate_retry=(value)
|
491
|
-
#
|
531
|
+
# Cornucopia::Util::Configuration.instance.configurations.alternate_retry = value
|
492
532
|
# end
|
493
533
|
|
494
534
|
# Sets or returns the name of the folder to generate reports into.
|
495
535
|
#
|
496
536
|
# Default: "cornucopia_report"
|
497
537
|
def base_folder
|
498
|
-
|
538
|
+
Cornucopia::Util::Configuration.instance.configurations.base_folder
|
499
539
|
end
|
500
540
|
|
501
541
|
def base_folder=(value)
|
502
|
-
|
542
|
+
Cornucopia::Util::Configuration.instance.configurations.base_folder = value
|
503
543
|
end
|
504
544
|
end
|
505
545
|
end
|
@@ -1,11 +1,22 @@
|
|
1
|
+
require "singleton"
|
2
|
+
|
1
3
|
module Cornucopia
|
2
4
|
module Util
|
5
|
+
class FileAssetCache
|
6
|
+
include Singleton
|
7
|
+
|
8
|
+
attr_accessor :asset_cache
|
9
|
+
|
10
|
+
def initialize
|
11
|
+
@asset_cache = {}
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
3
15
|
class FileAsset
|
4
16
|
class << self
|
5
17
|
def asset(asset_name)
|
6
|
-
|
7
|
-
|
8
|
-
@@asset_list[asset_name.to_sym]
|
18
|
+
Cornucopia::Util::FileAssetCache.asset_cache[asset_name.to_sym] ||= FileAsset.new(asset_name)
|
19
|
+
Cornucopia::Util::FileAssetCache.asset_cache[asset_name.to_sym]
|
9
20
|
end
|
10
21
|
end
|
11
22
|
|
data/lib/cornucopia/version.rb
CHANGED
@@ -32,7 +32,7 @@ describe "Cornucopia::Util::Configuration" do
|
|
32
32
|
expect(Cornucopia::Util::Configuration.order_seed).to be == seed_value
|
33
33
|
expect(RSpec.configuration.seed).to be == seed_value
|
34
34
|
ensure
|
35
|
-
RSpec.configuration.seed
|
35
|
+
RSpec.configuration.seed = config_seed
|
36
36
|
Cornucopia::Util::Configuration.order_seed = nil
|
37
37
|
end
|
38
38
|
end
|
@@ -161,9 +161,61 @@ describe "Cornucopia::Util::Configuration" do
|
|
161
161
|
end
|
162
162
|
|
163
163
|
describe "configured_reports" do
|
164
|
+
let(:sample_configuaration) do
|
165
|
+
config = {}
|
166
|
+
rand(5..10).times do
|
167
|
+
config[Faker::Lorem.word] = Faker::Lorem.sentence
|
168
|
+
end
|
169
|
+
|
170
|
+
config
|
171
|
+
end
|
172
|
+
|
164
173
|
[:rspec, :cucumber, :spinach, :capybara_page_diagnostics].each do |report_type|
|
165
|
-
|
166
|
-
|
174
|
+
describe "#{report_type} configured reports" do
|
175
|
+
after(:each) do
|
176
|
+
Cornucopia::Util::Configuration.set_report_configuration(
|
177
|
+
report_type,
|
178
|
+
Cornucopia::Util::Configuration.default_report_configuration(report_type)
|
179
|
+
)
|
180
|
+
end
|
181
|
+
|
182
|
+
it "has a #{report_type} report" do
|
183
|
+
expect(Cornucopia::Util::Configuration.report_configuration(report_type)).to be
|
184
|
+
end
|
185
|
+
|
186
|
+
it "has a default #{report_type} report" do
|
187
|
+
expect(Cornucopia::Util::Configuration.default_report_configuration(report_type)).to be
|
188
|
+
end
|
189
|
+
|
190
|
+
it "can set a #{report_type} report" do
|
191
|
+
Cornucopia::Util::Configuration.set_report_configuration(report_type, sample_configuaration)
|
192
|
+
expect(Cornucopia::Util::Configuration.report_configuration(report_type)).to be_a(Cornucopia::Util::ConfiguredReport)
|
193
|
+
end
|
194
|
+
|
195
|
+
it "can set a #{report_type} report to a ConfiguredReport" do
|
196
|
+
configured_report = Cornucopia::Util::ConfiguredReport.
|
197
|
+
new(Cornucopia::Util::Configuration.default_report_configuration(report_type))
|
198
|
+
|
199
|
+
Cornucopia::Util::Configuration.set_report_configuration(report_type, configured_report)
|
200
|
+
expect(Cornucopia::Util::Configuration.report_configuration(report_type)).to eq configured_report
|
201
|
+
end
|
202
|
+
|
203
|
+
it "doesn't change the default #{report_type} report" do
|
204
|
+
orig = Cornucopia::Util::Configuration.default_report_configuration(report_type).clone
|
205
|
+
Cornucopia::Util::Configuration.set_report_configuration(report_type, sample_configuaration)
|
206
|
+
expect(Cornucopia::Util::Configuration.default_report_configuration(report_type)).to eq orig
|
207
|
+
end
|
208
|
+
|
209
|
+
it "you can't change the default #{report_type} report" do
|
210
|
+
defaults = Cornucopia::Util::Configuration.default_report_configuration(report_type)
|
211
|
+
orig = defaults.clone
|
212
|
+
|
213
|
+
config_value =Faker::Lorem.sentence
|
214
|
+
defaults[config_value] = config_value
|
215
|
+
|
216
|
+
expect(Cornucopia::Util::Configuration.default_report_configuration(report_type)).to eq orig
|
217
|
+
expect(Cornucopia::Util::Configuration.default_report_configuration(report_type)[config_value]).not_to be
|
218
|
+
end
|
167
219
|
end
|
168
220
|
end
|
169
221
|
end
|
@@ -298,7 +350,7 @@ describe "Cornucopia::Util::Configuration" do
|
|
298
350
|
|
299
351
|
it "returns the value for a report" do
|
300
352
|
def_value = [true, false].sample
|
301
|
-
report
|
353
|
+
report = Faker::Lorem.word
|
302
354
|
|
303
355
|
Cornucopia::Util::Configuration.auto_open_report_after_generation(def_value)
|
304
356
|
Cornucopia::Util::Configuration.auto_open_report_after_generation(!def_value, report)
|
@@ -315,7 +367,7 @@ describe "Cornucopia::Util::Configuration" do
|
|
315
367
|
|
316
368
|
it "#can set the value" do
|
317
369
|
begin
|
318
|
-
base_value
|
370
|
+
base_value = Faker::Lorem.sentence
|
319
371
|
Cornucopia::Util::Configuration.base_folder = base_value
|
320
372
|
|
321
373
|
expect(Cornucopia::Util::Configuration.base_folder).to eq base_value
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cornucopia
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.17
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- RealNobody
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-03-
|
11
|
+
date: 2015-03-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|