cypress_rails 0.5.0 → 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 70d8ba1c2c997e512573b35b6823f9b14f930262
|
4
|
+
data.tar.gz: b75040d5e579711328d36e3691fc92aa9361505a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6481e794afc07e83d8786feccf7883b4cf9c8f35a8a156aae299dbe31d01fe2d42d1b332f3ca4da9e1f43b2faf67a5f031a403cd0d625c0a40b655d57ee0d280
|
7
|
+
data.tar.gz: 2018f01916a2632972d136936679b39b7c8d15b90b49399d464d5a9af7ca2c73a2192443d352212cee4f5640cf4df3c1c34665b4f58a32341e9faecf13f12a06
|
data/lib/cypress_rails/cli.rb
CHANGED
@@ -5,7 +5,9 @@ require "cypress_rails/runner"
|
|
5
5
|
require "cypress_rails/server"
|
6
6
|
|
7
7
|
module CypressRails
|
8
|
-
Config = Struct.new(
|
8
|
+
Config = Struct.new(
|
9
|
+
:command, :cypress_bin_path, :host, :log_path, :tests_path, :healthcheck_url
|
10
|
+
)
|
9
11
|
|
10
12
|
class CLI < Thor
|
11
13
|
class_option :command,
|
@@ -33,6 +35,12 @@ module CypressRails
|
|
33
35
|
desc: "path to Cypress tests",
|
34
36
|
default: "./spec",
|
35
37
|
aliases: %w(-t)
|
38
|
+
class_option :healthcheck_url,
|
39
|
+
type: :string,
|
40
|
+
desc: <<~DESC,
|
41
|
+
url to ping the server before running tests (you don't need the port, it will be injected)
|
42
|
+
DESC
|
43
|
+
aliases: %w(-u)
|
36
44
|
|
37
45
|
desc "test", "Run all tests in headless mode"
|
38
46
|
def test
|
@@ -55,12 +63,14 @@ module CypressRails
|
|
55
63
|
private
|
56
64
|
|
57
65
|
def server
|
58
|
-
@server ||= Server.new(config.host, config.command, config.log_path)
|
66
|
+
@server ||= Server.new(config.host, config.command, config.healthcheck_url, config.log_path)
|
59
67
|
end
|
60
68
|
|
61
69
|
def config
|
62
70
|
@config ||= Config.new(
|
63
|
-
*options.values_at(
|
71
|
+
*options.values_at(
|
72
|
+
:command, :cypress_bin_path, :host, :log_path, :tests_path, :healthcheck_url
|
73
|
+
)
|
64
74
|
)
|
65
75
|
end
|
66
76
|
end
|
data/lib/cypress_rails/server.rb
CHANGED
@@ -1,24 +1,27 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require "socket"
|
4
|
+
require "uri"
|
4
5
|
|
5
6
|
module CypressRails
|
6
7
|
class Server
|
7
8
|
extend Forwardable
|
8
9
|
|
9
|
-
attr_reader :host, :port, :command, :log_path
|
10
|
+
attr_reader :host, :port, :command, :healthcheck_url, :log_path
|
10
11
|
|
11
|
-
def initialize(host, command, log_path)
|
12
|
+
def initialize(host, command, healthcheck_url, log_path)
|
12
13
|
@host = host
|
13
14
|
@port = find_free_port
|
14
15
|
@command = command
|
16
|
+
@healthcheck_url = URI(healthcheck_url || "http://#{host}").tap { |uri| uri.port = port }
|
15
17
|
@log_path = log_path
|
16
18
|
end
|
17
19
|
|
18
20
|
def start
|
19
21
|
spawn_server
|
20
22
|
until server_responsive?
|
21
|
-
|
23
|
+
puts "Pinging #{healthcheck_url.to_s}..."
|
24
|
+
sleep 1
|
22
25
|
end
|
23
26
|
yield(host, port) if block_given?
|
24
27
|
ensure
|
@@ -43,7 +46,7 @@ module CypressRails
|
|
43
46
|
end
|
44
47
|
|
45
48
|
def server_responsive?
|
46
|
-
system("curl #{
|
49
|
+
system("curl #{healthcheck_url}", [:out, :err] => "/dev/null")
|
47
50
|
end
|
48
51
|
|
49
52
|
def stop_server
|
@@ -18,7 +18,7 @@ RSpec.describe CypressRails::Runner do
|
|
18
18
|
let(:server) { "rackup #{project_path}/config.ru" }
|
19
19
|
|
20
20
|
it "runs cypress correctly" do
|
21
|
-
CypressRails::Server.new(host, server, log_path).start do |host, port|
|
21
|
+
CypressRails::Server.new(host, server, nil, log_path).start do |host, port|
|
22
22
|
CypressRails::Runner.new(
|
23
23
|
host: host,
|
24
24
|
port: port,
|
@@ -36,7 +36,7 @@ RSpec.describe CypressRails::Runner do
|
|
36
36
|
|
37
37
|
it "returns status code 0" do
|
38
38
|
status = nil
|
39
|
-
CypressRails::Server.new(host, server, log_path).start do |host, port|
|
39
|
+
CypressRails::Server.new(host, server, nil, log_path).start do |host, port|
|
40
40
|
status = CypressRails::Runner.new(
|
41
41
|
host: host,
|
42
42
|
port: port,
|
@@ -56,7 +56,7 @@ RSpec.describe CypressRails::Runner do
|
|
56
56
|
let(:server) { "rackup #{project_path}/config.ru" }
|
57
57
|
|
58
58
|
it "runs cypress correctly" do
|
59
|
-
CypressRails::Server.new(host, server, log_path).start do |host, port|
|
59
|
+
CypressRails::Server.new(host, server, nil, log_path).start do |host, port|
|
60
60
|
CypressRails::Runner.new(
|
61
61
|
host: host,
|
62
62
|
port: port,
|
@@ -74,7 +74,7 @@ RSpec.describe CypressRails::Runner do
|
|
74
74
|
|
75
75
|
it "returns non-zero status code" do
|
76
76
|
status = nil
|
77
|
-
CypressRails::Server.new(host, server, log_path).start do |host, port|
|
77
|
+
CypressRails::Server.new(host, server, nil, log_path).start do |host, port|
|
78
78
|
status = CypressRails::Runner.new(
|
79
79
|
host: host,
|
80
80
|
port: port,
|
@@ -8,16 +8,15 @@ RSpec.describe CypressRails::Server do
|
|
8
8
|
let(:host) { "localhost" }
|
9
9
|
let(:command) { "rackup spec/support/dummy_passing/config.ru" }
|
10
10
|
let(:log_path) { "/dev/null" }
|
11
|
+
let(:server) { described_class.new(host, command, nil, log_path) }
|
11
12
|
|
12
13
|
describe "#port" do
|
13
|
-
subject(:port) {
|
14
|
+
subject(:port) { server.port }
|
14
15
|
|
15
16
|
it { is_expected.to be_open_port }
|
16
17
|
end
|
17
18
|
|
18
19
|
describe "#start" do
|
19
|
-
subject(:server) { described_class.new(host, command, log_path) }
|
20
|
-
|
21
20
|
it "starts the server and blocks until it is ready" do
|
22
21
|
response = nil
|
23
22
|
server.start {
|
@@ -26,6 +25,19 @@ RSpec.describe CypressRails::Server do
|
|
26
25
|
expect(response.status).to include "200"
|
27
26
|
end
|
28
27
|
|
28
|
+
context "when a healthcheck url is passed" do
|
29
|
+
let(:command) { "rackup spec/support/dummy_healthcheck/config.ru" }
|
30
|
+
let(:server) { described_class.new(host, command, "http://localhost/foobar", log_path) }
|
31
|
+
|
32
|
+
it "pings the provided url" do
|
33
|
+
response = nil
|
34
|
+
server.start {
|
35
|
+
response = open("http://localhost:#{server.port}/foobar")
|
36
|
+
}
|
37
|
+
expect(response.status).to include "200"
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
29
41
|
it "yields the port number and host into the block" do
|
30
42
|
expect { |b| server.start(&b) }.to yield_with_args("localhost", server.port)
|
31
43
|
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
run ->(env) {
|
4
|
+
sleep 0.2
|
5
|
+
request = Rack::Request.new(env)
|
6
|
+
if request.path == "/foobar"
|
7
|
+
[
|
8
|
+
200,
|
9
|
+
{ "Content-Type" => "text/html" },
|
10
|
+
[
|
11
|
+
<<~HTML
|
12
|
+
<html>
|
13
|
+
<head><title>Dummy app</title></head>
|
14
|
+
<body>
|
15
|
+
<h1>Hello Dummy!</h1>
|
16
|
+
</body>
|
17
|
+
</html>
|
18
|
+
HTML
|
19
|
+
]
|
20
|
+
]
|
21
|
+
else
|
22
|
+
[
|
23
|
+
404,
|
24
|
+
{ "Content-Type" => "text/html" },
|
25
|
+
[""]
|
26
|
+
]
|
27
|
+
end
|
28
|
+
}
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cypress_rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Szymon Szeliga
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-06-
|
11
|
+
date: 2018-06-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: thor
|
@@ -218,6 +218,7 @@ files:
|
|
218
218
|
- spec/support/dummy_failing/cypress/support/index.js
|
219
219
|
- spec/support/dummy_failing/package.json
|
220
220
|
- spec/support/dummy_failing/yarn.lock
|
221
|
+
- spec/support/dummy_healthcheck/config.ru
|
221
222
|
- spec/support/dummy_passing/config.ru
|
222
223
|
- spec/support/dummy_passing/cypress.json
|
223
224
|
- spec/support/dummy_passing/cypress/integration/basic_spec.js
|
@@ -264,6 +265,7 @@ test_files:
|
|
264
265
|
- spec/support/dummy_failing/cypress/support/index.js
|
265
266
|
- spec/support/dummy_failing/package.json
|
266
267
|
- spec/support/dummy_failing/yarn.lock
|
268
|
+
- spec/support/dummy_healthcheck/config.ru
|
267
269
|
- spec/support/dummy_passing/config.ru
|
268
270
|
- spec/support/dummy_passing/cypress.json
|
269
271
|
- spec/support/dummy_passing/cypress/integration/basic_spec.js
|