test-factory 0.2.4 → 0.2.5
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.
- data/README.md +10 -3
- data/lib/test-factory/page_factory.rb +6 -2
- data/lib/test-factory/string_factory.rb +2 -6
- data/test-factory.gemspec +1 -1
- metadata +2 -2
data/README.md
CHANGED
@@ -35,6 +35,13 @@ Using the TestFactory properly involves three distinct steps:
|
|
35
35
|
level requires only basic skills with Ruby and Watir, but a strong command of your DSL
|
36
36
|
(the thing you're building with TestFactory).
|
37
37
|
|
38
|
+
These three steps can all be accomplished by a single person. However, ideally, they should be done by three or four people, as the design philosophy of TestFactory allows for specialization:
|
39
|
+
|
40
|
+
- A Watir specialist works on defining page elements and actions inside of page classes
|
41
|
+
- A Ruby specialist uses the output of the Watir specialist to build the data objects and their helper methods, creating the DSL for the project
|
42
|
+
- A non-programmer--say, a business analyst or a manual tester with domain expertise--writes test scenarios, in English
|
43
|
+
- A more junior automation engineer translates the English into Ruby code, via the DSL created by the Ruby specialist (if you're using Cucumber, these would be your step definitions)
|
44
|
+
|
38
45
|
How to Start
|
39
46
|
------------
|
40
47
|
|
@@ -120,7 +127,7 @@ class YourDataObject
|
|
120
127
|
# Hash into YourDataObject's class instance variables
|
121
128
|
set_options(defaults.merge(opts))
|
122
129
|
|
123
|
-
requires
|
130
|
+
requires :id # This line allows you to specify any class instance variables that must
|
124
131
|
# be explicitly defined for the data object
|
125
132
|
end
|
126
133
|
|
@@ -227,12 +234,12 @@ end
|
|
227
234
|
```
|
228
235
|
|
229
236
|
* The setting of random values for select lists in a data object is determined by passing
|
230
|
-
the
|
237
|
+
the string '::random::' in the instance variable, or as the value in the key/value pair
|
231
238
|
passed in an `#edit` method's `opts` parameter. The `#create` and `#edit` methods will
|
232
239
|
handle the necessary logic. The purpose is to prevent the need for custom randomizing
|
233
240
|
CRUD methods in the data object.
|
234
241
|
* See the gem_ext.rb file's discussion of the Watir `#fit` method for additional
|
235
|
-
design pattern rules to follow.
|
242
|
+
design pattern rules to follow (If you're reading this on rubydoc.info then click the Watir module link)
|
236
243
|
* Please make an effort to follow the [Ruby Style Guidelines](http://www.caliban.org/ruby/rubyguide.shtml#style).
|
237
244
|
|
238
245
|
Notice
|
@@ -79,6 +79,7 @@ class PageFactory
|
|
79
79
|
# action(:select_style) { |stylename, b| b.div(:text=>/#{Regexp.escape(stylename)}/).link(:text=>"Select").click } => #select_style(stylename)
|
80
80
|
#
|
81
81
|
def action method_name, &block
|
82
|
+
raise "#{method_name} is being defined twice in #{self}!" if self.instance_methods.include?(method_name.to_sym)
|
82
83
|
define_method method_name.to_s do |*thing|
|
83
84
|
Proc.new(&block).call *thing, self
|
84
85
|
end
|
@@ -98,7 +99,9 @@ class PageFactory
|
|
98
99
|
#
|
99
100
|
# The last parameter in the method is optional. Use it when
|
100
101
|
# you need the method name to be different from the text of
|
101
|
-
# the link--for example if the link text
|
102
|
+
# the link--for example if the link text is something unhelpful,
|
103
|
+
# like "here", or else the link text gets updated (e.g., what was
|
104
|
+
# "Log In" is now "Sign In", instead) and you don't
|
102
105
|
# want to have to go through all your data objects and step
|
103
106
|
# definitions to update them to the new method name.
|
104
107
|
#
|
@@ -124,7 +127,8 @@ class PageFactory
|
|
124
127
|
#
|
125
128
|
# The last parameter in the method is optional. Use it when
|
126
129
|
# you need the method name to be different from the text of
|
127
|
-
# the button--for example if the button text
|
130
|
+
# the button--for example if the button text is unhelpful, like "Go", or else
|
131
|
+
# it changes (e.g., from "Update" to "Edit") and you don't
|
128
132
|
# want to have to go through all your data objects and step
|
129
133
|
# definitions to update them to the new method name.
|
130
134
|
#
|
@@ -9,9 +9,7 @@ module StringFactory
|
|
9
9
|
# @param s [String] Typically this will be left blank, but if included, any string created will be prepended with s. Note that the string length will still be as specified
|
10
10
|
#
|
11
11
|
def random_string(length=10, s="")
|
12
|
-
length.enum_for(:times).inject(s)
|
13
|
-
s << rand(93) + 33
|
14
|
-
end
|
12
|
+
length.enum_for(:times).inject(s) { s << rand(93) + 33 }
|
15
13
|
end
|
16
14
|
|
17
15
|
# A random string creator that draws from all printable ASCII and High ASCII characters
|
@@ -20,9 +18,7 @@ module StringFactory
|
|
20
18
|
# @param s [String] Typically this will be left blank, but if included, any string created will be prepended with s. Note that the string length will still be as specified
|
21
19
|
#
|
22
20
|
def random_high_ascii(length=10, s="")
|
23
|
-
length.enum_for(:times).inject(s)
|
24
|
-
s << rand(223) + 33
|
25
|
-
end
|
21
|
+
length.enum_for(:times).inject(s) { s << rand(223) + 33 }
|
26
22
|
end
|
27
23
|
|
28
24
|
# A "friendlier" random string generator. No characters need to be escaped for valid URLs.
|
data/test-factory.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
spec = Gem::Specification.new do |s|
|
2
2
|
s.name = 'test-factory'
|
3
|
-
s.version = '0.2.
|
3
|
+
s.version = '0.2.5'
|
4
4
|
s.summary = %q{rSmart's framework for creating automated testing scripts}
|
5
5
|
s.description = %q{This gem provides a set of modules and methods to help quickly and DRYly create a test automation framework using Ruby and Watir (or watir-webdriver).}
|
6
6
|
s.files = Dir.glob("**/**/**")
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: test-factory
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.5
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-05-08 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: watir-webdriver
|