shoot 0.2.2 → 1.0.0
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 +14 -0
- data/lib/shoot/cli.rb +42 -12
- data/lib/shoot/scenario.rb +18 -9
- data/lib/shoot/version.rb +1 -1
- data/lib/shoot.rb +1 -1
- data/shoot.gemspec +2 -1
- data/spec/cli_spec.rb +41 -4
- metadata +16 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: aeabb7d1b0a3c562b69bd4176f58fd70efce1f73
|
4
|
+
data.tar.gz: 0826500463dd17d0d1d6258e6bccc728a4db32c0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e280c175e5cd57471645f856b68ca74c0d76551edd530d6b4918e9b10c1badd7a355a1fbdacb3b3b3ec4e492d65db6b34ae5f6ac03b0e7ea6c09d34ffa9b2414
|
7
|
+
data.tar.gz: 44fc47dbf6035f462b66f8d20cf47760ffaec6eeff791f0a60b814b431850b277baece61c99c754d96c3625b1a5f1977c9461a51eba02e739ee9daf1482edd84
|
data/README.md
CHANGED
@@ -67,6 +67,16 @@ This will run all the methods of MyScenario and generate screenshots for all act
|
|
67
67
|
|
68
68
|
The resulting images will be saved on <font size="7"> `.screenshots`</font> folder.
|
69
69
|
|
70
|
+
If you wanna just test your scenarios, without paying SauceLabs and wasting time with remote connections:
|
71
|
+
|
72
|
+
$ shoot test my_scenario.rb
|
73
|
+
|
74
|
+
Or you can run a whole folder, like:
|
75
|
+
|
76
|
+
$ shoot test my_scenarios/
|
77
|
+
|
78
|
+
The `test` command will run locally using phantomjs (capybara).
|
79
|
+
|
70
80
|
You can choose to deactivate the browsers you don't wanna use, based on id as well. Example:
|
71
81
|
|
72
82
|
$ shoot deactivate 2
|
@@ -77,6 +87,10 @@ If you want to deactivate all the active browsers at once you can run:
|
|
77
87
|
|
78
88
|
$ shoot deactivate_all
|
79
89
|
|
90
|
+
To open all screenshots (on a Mac), run:
|
91
|
+
|
92
|
+
$ shoot open
|
93
|
+
|
80
94
|
|
81
95
|
## Contributing
|
82
96
|
|
data/lib/shoot/cli.rb
CHANGED
@@ -7,6 +7,17 @@ module Shoot
|
|
7
7
|
require 'fileutils'
|
8
8
|
FileUtils::mkdir_p '.screenshots'
|
9
9
|
BROWSERS_PATH = '.screenshots/.browsers.json'
|
10
|
+
map %w[--version -v] => :version
|
11
|
+
|
12
|
+
desc 'version, --version, -v', 'Shoot version'
|
13
|
+
def version
|
14
|
+
puts Shoot::VERSION
|
15
|
+
end
|
16
|
+
|
17
|
+
desc 'open', 'Opens all screenshots taken'
|
18
|
+
def open
|
19
|
+
open_all_screenshots
|
20
|
+
end
|
10
21
|
|
11
22
|
desc 'list', 'List all platforms. Optionally pass a filter (e.g. browserstack list ie)'
|
12
23
|
def list(filter = nil)
|
@@ -19,19 +30,15 @@ module Shoot
|
|
19
30
|
end
|
20
31
|
|
21
32
|
desc 'scenario', 'Runs the given scenario on all active platforms or one platform, based on ID'
|
22
|
-
def scenario(file, id = nil
|
23
|
-
require_file(file)
|
24
|
-
klass_name = File.basename(file, '.rb').split('_').map(&:capitalize).join
|
25
|
-
klass = Kernel.const_get(klass_name)
|
26
|
-
|
33
|
+
def scenario(file, id = nil)
|
27
34
|
runners = id ? [json[id.to_i]] : _active
|
28
|
-
runners.each
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
+
runners.each {|config| run file, config }
|
36
|
+
end
|
37
|
+
|
38
|
+
desc 'test', 'Runs the given scenario or all files in a directory on a local phantomjs'
|
39
|
+
def test(path)
|
40
|
+
files = File.directory?(path) ? Dir.glob("#{path}/*.rb") : [path]
|
41
|
+
files.each{|file| run file }
|
35
42
|
end
|
36
43
|
|
37
44
|
desc 'activate', 'Activate one platform, based on ID or interval'
|
@@ -58,10 +65,33 @@ module Shoot
|
|
58
65
|
end
|
59
66
|
|
60
67
|
no_commands do
|
68
|
+
def open_all_screenshots
|
69
|
+
`open .screenshots/*.png`
|
70
|
+
end
|
71
|
+
|
72
|
+
def run(file, config=nil)
|
73
|
+
klass = get_const_from_file(file)
|
74
|
+
instance = klass.new(config)
|
75
|
+
klass.instance_methods(false).each do |method|
|
76
|
+
instance.shoot(method)
|
77
|
+
end
|
78
|
+
instance.ok
|
79
|
+
end
|
80
|
+
|
61
81
|
def require_file(file)
|
62
82
|
require Dir.pwd + '/' + file
|
63
83
|
end
|
64
84
|
|
85
|
+
def constantize_file_name(file)
|
86
|
+
klass_name = File.basename(file, '.rb').split('_').map(&:capitalize).join
|
87
|
+
Kernel.const_get(klass_name)
|
88
|
+
end
|
89
|
+
|
90
|
+
def get_const_from_file(file)
|
91
|
+
require_file(file)
|
92
|
+
constantize_file_name(file)
|
93
|
+
end
|
94
|
+
|
65
95
|
def table(browsers)
|
66
96
|
table = browsers.map do |p|
|
67
97
|
to_row(p)
|
data/lib/shoot/scenario.rb
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
require 'selenium-webdriver'
|
2
2
|
require 'capybara'
|
3
|
-
|
4
3
|
class Shoot::Scenario
|
5
4
|
URL = sprintf 'http://%s:%s@hub.browserstack.com/wd/hub',
|
6
5
|
ENV['BROWSERSTACK_USER'],
|
@@ -8,15 +7,22 @@ class Shoot::Scenario
|
|
8
7
|
|
9
8
|
include Capybara::DSL
|
10
9
|
|
11
|
-
def initialize(platform)
|
12
|
-
|
13
|
-
|
10
|
+
def initialize(platform=nil)
|
11
|
+
if platform
|
12
|
+
@platform = platform
|
13
|
+
config_capabilities
|
14
|
+
|
15
|
+
Capybara.register_driver platform_name do |app|
|
16
|
+
Capybara::Selenium::Driver.new(app,
|
17
|
+
browser: :remote,
|
18
|
+
url: URL,
|
19
|
+
desired_capabilities: @capabilities)
|
20
|
+
end
|
21
|
+
else
|
22
|
+
require 'capybara/poltergeist'
|
14
23
|
|
15
|
-
|
16
|
-
|
17
|
-
browser: :remote,
|
18
|
-
url: URL,
|
19
|
-
desired_capabilities: @capabilities)
|
24
|
+
Capybara.run_server = false
|
25
|
+
@platform_name = :poltergeist
|
20
26
|
end
|
21
27
|
|
22
28
|
puts "Running #{platform_name}"
|
@@ -29,6 +35,9 @@ class Shoot::Scenario
|
|
29
35
|
require 'fileutils'
|
30
36
|
FileUtils::mkdir_p '.screenshots'
|
31
37
|
save_screenshot(".screenshots/#{method} #{platform_name}.png")
|
38
|
+
rescue => e
|
39
|
+
puts "FAILED #{method}: #{e.inspect}"
|
40
|
+
save_screenshot(".screenshots/failed #{method} #{platform_name}.png")
|
32
41
|
end
|
33
42
|
|
34
43
|
def ok
|
data/lib/shoot/version.rb
CHANGED
data/lib/shoot.rb
CHANGED
data/shoot.gemspec
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# coding: utf-8
|
2
2
|
lib = File.expand_path("../lib", __FILE__)
|
3
3
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
-
require "shoot
|
4
|
+
require "shoot"
|
5
5
|
|
6
6
|
Gem::Specification.new do |spec|
|
7
7
|
spec.name = "shoot"
|
@@ -27,4 +27,5 @@ Gem::Specification.new do |spec|
|
|
27
27
|
spec.add_dependency "thor", "~> 0.19"
|
28
28
|
spec.add_dependency "colorize", "~> 0.7"
|
29
29
|
spec.add_dependency "rest-client", "~> 1.7"
|
30
|
+
spec.add_dependency "poltergeist", "~> 1.6"
|
30
31
|
end
|
data/spec/cli_spec.rb
CHANGED
@@ -82,6 +82,45 @@ describe 'Shoot::CLI' do
|
|
82
82
|
end
|
83
83
|
|
84
84
|
describe 'scenario' do
|
85
|
+
before do
|
86
|
+
allow(cli).to receive(:_active).and_return(["foo"])
|
87
|
+
allow(cli).to receive(:run)
|
88
|
+
end
|
89
|
+
|
90
|
+
it 'runs scenario' do
|
91
|
+
cli.scenario('foo.rb')
|
92
|
+
expect(cli).to have_received(:run)
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
describe 'test' do
|
97
|
+
describe 'file' do
|
98
|
+
before do
|
99
|
+
allow(cli).to receive(:run)
|
100
|
+
end
|
101
|
+
|
102
|
+
it 'runs scenario' do
|
103
|
+
cli.test('foo.rb')
|
104
|
+
expect(cli).to have_received(:run).with("foo.rb")
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
describe 'directory' do
|
109
|
+
before do
|
110
|
+
allow(File).to receive(:directory?).with('foo').and_return(true)
|
111
|
+
allow(Dir).to receive(:glob).with('foo/*.rb').and_return(["foo/bar.rb", "foo/baz.rb"])
|
112
|
+
allow(cli).to receive(:run)
|
113
|
+
end
|
114
|
+
|
115
|
+
it 'runs scenario' do
|
116
|
+
cli.test('foo')
|
117
|
+
expect(cli).to have_received(:run).with("foo/bar.rb")
|
118
|
+
expect(cli).to have_received(:run).with("foo/baz.rb")
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
describe 'run' do
|
85
124
|
before do
|
86
125
|
class Foo
|
87
126
|
def initialize(config); end
|
@@ -91,13 +130,11 @@ describe 'Shoot::CLI' do
|
|
91
130
|
allow_any_instance_of(Foo).to receive(:shoot)
|
92
131
|
expect_any_instance_of(Foo).to receive(:ok)
|
93
132
|
|
94
|
-
allow(cli).to receive(:
|
95
|
-
allow(cli).to receive(:require_file)
|
133
|
+
allow(cli).to receive(:get_const_from_file).with("foo.rb").and_return(Foo)
|
96
134
|
end
|
97
135
|
|
98
136
|
it 'runs scenario' do
|
99
|
-
cli.
|
100
|
-
expect(cli).to have_received(:require_file)
|
137
|
+
cli.run('foo.rb', foo: :bar)
|
101
138
|
end
|
102
139
|
end
|
103
140
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: shoot
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Juan Lulkin
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-05-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -122,6 +122,20 @@ dependencies:
|
|
122
122
|
- - "~>"
|
123
123
|
- !ruby/object:Gem::Version
|
124
124
|
version: '1.7'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: poltergeist
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - "~>"
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '1.6'
|
132
|
+
type: :runtime
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - "~>"
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '1.6'
|
125
139
|
description: A helper to take shots on BrowserStack. Run the shoot binary for more
|
126
140
|
info.
|
127
141
|
email:
|