jscov 0.3.0 → 0.4.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 +32 -2
- data/lib/jscov.rb +6 -0
- data/lib/jscov/collector.rb +48 -0
- data/lib/jscov/rspec.rb +0 -7
- data/lib/jscov/version.rb +1 -1
- metadata +3 -3
- data/lib/jscov/test_hooks.rb +0 -46
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f82380fb241d12d3d6eebe7d3e8871b27cabb321616e512b98b5608e59bfb0cc
|
4
|
+
data.tar.gz: 45bee86b0495527eb965828c79142572e26c0010e2b983d870cecf6d61cc4e27
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 22683961b04ade60df6a5a8511cfba794370e81476b55518b049b7ab75d5fba1fa530039cdb8e6aa8d7baba99d5e65ab5e4599d46d01bd3661857b5b34c8d092
|
7
|
+
data.tar.gz: 0436e397fc6250f3e3430b0c12a0cd4afa20db53d4596dd47896e59106615dd71b86a64a5700a1f312b5e85cdcc89e080a8813d34c9dc2dc282cf3b6116209c0
|
data/README.md
CHANGED
@@ -64,13 +64,26 @@ Configure selenium to capture the output of `console.log`:
|
|
64
64
|
|
65
65
|
```ruby
|
66
66
|
RSpec.configure do |config|
|
67
|
-
config.before(type: :system) do
|
68
|
-
caps = Selenium::WebDriver::Remote::Capabilities.chrome(
|
67
|
+
config.before(type: :system) do
|
68
|
+
caps = Selenium::WebDriver::Remote::Capabilities.chrome(
|
69
|
+
'chromeOptions' => { w3c: false },
|
70
|
+
'goog:loggingPrefs' => { browser: 'ALL' }
|
71
|
+
)
|
69
72
|
driven_by :selenium, using: :headless_chrome, options: { desired_capabilities: caps }
|
70
73
|
end
|
71
74
|
end
|
72
75
|
```
|
73
76
|
|
77
|
+
And configure rspec to save coverage files after each examples:
|
78
|
+
|
79
|
+
```ruby
|
80
|
+
RSpec.configure do |config|
|
81
|
+
config.after(type: :system) do
|
82
|
+
Jscov.save!
|
83
|
+
end
|
84
|
+
end
|
85
|
+
```
|
86
|
+
|
74
87
|
Run `NODE_ENV=test RAILS_ENV=test bin/rails assets:precompile` for generating js codes that applied `istanbul`:
|
75
88
|
|
76
89
|
```bash
|
@@ -84,6 +97,23 @@ The collected coverages can be output as a report using [nyc](https://github.com
|
|
84
97
|
$ npx nyc report --temp-dir=tmp/jscov
|
85
98
|
```
|
86
99
|
|
100
|
+
### Tips
|
101
|
+
|
102
|
+
Selenium's `logs.get(:browser)` is a destructive method. `jscov` depends on it. If you use it out of `jscov`, it will affect to result of `jscov`, and vice versa.
|
103
|
+
|
104
|
+
You can pass browser logs to `Jscov.save!` to avoid this issue:
|
105
|
+
|
106
|
+
```ruby
|
107
|
+
logs = Capybara.current_session.driver.browser.manage.logs.get(:browser)
|
108
|
+
Jscov.save!(logs: logs)
|
109
|
+
```
|
110
|
+
|
111
|
+
If you use multiple capybara sessions, you can pass your capybara sessions to `Jscov.save!` to save coverages that collected on your sessions:
|
112
|
+
|
113
|
+
```
|
114
|
+
Jscov.save!(session: your_capybara_session)
|
115
|
+
```
|
116
|
+
|
87
117
|
### Vue.js
|
88
118
|
|
89
119
|
To collect coverage for `.vue` files, you will need to change the configurations.
|
data/lib/jscov.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require "securerandom"
|
2
2
|
require "jscov/configuration"
|
3
3
|
require "jscov/rack_middleware"
|
4
|
+
require "jscov/collector"
|
4
5
|
|
5
6
|
module Jscov
|
6
7
|
class << self
|
@@ -17,5 +18,10 @@ module Jscov
|
|
17
18
|
FileUtils.rm_f(Dir.glob(dir_path.join("jscov_*.json")))
|
18
19
|
FileUtils.mkdir_p(dir_path)
|
19
20
|
end
|
21
|
+
|
22
|
+
def save!(session: nil, logs: nil)
|
23
|
+
collector = Collector.new(session, logs)
|
24
|
+
collector.coverages.each(&:save)
|
25
|
+
end
|
20
26
|
end
|
21
27
|
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require "json"
|
2
|
+
require "jscov/coverage"
|
3
|
+
|
4
|
+
module Jscov
|
5
|
+
class Collector
|
6
|
+
def initialize(session, logs)
|
7
|
+
@session = session || Capybara.current_session
|
8
|
+
@logs = logs
|
9
|
+
end
|
10
|
+
|
11
|
+
def coverages
|
12
|
+
return [] unless selenium?
|
13
|
+
|
14
|
+
dump_coverage
|
15
|
+
|
16
|
+
browser_logs
|
17
|
+
.map { |log| parse(log.message) }
|
18
|
+
.compact
|
19
|
+
.map { |cov| Coverage.new(cov) }
|
20
|
+
end
|
21
|
+
|
22
|
+
def selenium?
|
23
|
+
@session.driver.browser.respond_to?(:manage)
|
24
|
+
end
|
25
|
+
|
26
|
+
def dump_coverage
|
27
|
+
code = <<~JS
|
28
|
+
typeof __jscov_dumpCoverage === 'function' && __jscov_dumpCoverage()
|
29
|
+
JS
|
30
|
+
@session.execute_script(code)
|
31
|
+
end
|
32
|
+
|
33
|
+
def browser_logs
|
34
|
+
logs = @session.driver.browser.manage.logs.get(:browser)
|
35
|
+
(@logs || []) + logs
|
36
|
+
end
|
37
|
+
|
38
|
+
def parse(message)
|
39
|
+
json_string = message[/__jscov" (.*)/, 1]
|
40
|
+
return if json_string.nil?
|
41
|
+
|
42
|
+
json = JSON.parse(json_string)
|
43
|
+
JSON.parse(json)
|
44
|
+
rescue JSON::ParserError
|
45
|
+
nil
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
data/lib/jscov/rspec.rb
CHANGED
@@ -1,15 +1,8 @@
|
|
1
1
|
require "capybara"
|
2
2
|
require "jscov"
|
3
|
-
require "jscov/test_hooks"
|
4
3
|
|
5
4
|
RSpec.configure do |config|
|
6
5
|
config.before(:suite) do
|
7
6
|
Jscov.clean!
|
8
7
|
end
|
9
|
-
|
10
|
-
%i[system feature].each do |type|
|
11
|
-
config.after(type: type) do
|
12
|
-
Jscov::TestHooks.new(Capybara.current_session).after_example!
|
13
|
-
end
|
14
|
-
end
|
15
8
|
end
|
data/lib/jscov/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jscov
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kazuki Nishikawa
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-10-
|
11
|
+
date: 2020-10-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rack
|
@@ -112,11 +112,11 @@ files:
|
|
112
112
|
- Rakefile
|
113
113
|
- lib/jscov.rb
|
114
114
|
- lib/jscov/bless.rb
|
115
|
+
- lib/jscov/collector.rb
|
115
116
|
- lib/jscov/configuration.rb
|
116
117
|
- lib/jscov/coverage.rb
|
117
118
|
- lib/jscov/rack_middleware.rb
|
118
119
|
- lib/jscov/rspec.rb
|
119
|
-
- lib/jscov/test_hooks.rb
|
120
120
|
- lib/jscov/version.rb
|
121
121
|
homepage: https://github.com/kzkn/jscov
|
122
122
|
licenses:
|
data/lib/jscov/test_hooks.rb
DELETED
@@ -1,46 +0,0 @@
|
|
1
|
-
require "json"
|
2
|
-
|
3
|
-
module Jscov
|
4
|
-
class TestHooks
|
5
|
-
def initialize(session)
|
6
|
-
@session = session
|
7
|
-
end
|
8
|
-
|
9
|
-
def after_example!
|
10
|
-
return unless selenium?
|
11
|
-
|
12
|
-
dump_coverage
|
13
|
-
|
14
|
-
browser_logs.each do |log|
|
15
|
-
coverage = parse(log.message)
|
16
|
-
if coverage
|
17
|
-
Coverage.new(coverage).save
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
def selenium?
|
23
|
-
@session.driver.browser.respond_to?(:manage)
|
24
|
-
end
|
25
|
-
|
26
|
-
def dump_coverage
|
27
|
-
@session.execute_script <<~JS
|
28
|
-
typeof __jscov_dumpCoverage === 'function' && __jscov_dumpCoverage()
|
29
|
-
JS
|
30
|
-
end
|
31
|
-
|
32
|
-
def browser_logs
|
33
|
-
@session.driver.browser.manage.logs.get(:browser)
|
34
|
-
end
|
35
|
-
|
36
|
-
def parse(message)
|
37
|
-
json_string = message[/__jscov" (.*)/, 1]
|
38
|
-
return if json_string.nil?
|
39
|
-
|
40
|
-
json = JSON.parse(json_string)
|
41
|
-
JSON.parse(json)
|
42
|
-
rescue JSON::ParserError
|
43
|
-
nil
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|