-
-
Notifications
You must be signed in to change notification settings - Fork 1.1k
/
attachments.feature
144 lines (126 loc) · 4.61 KB
/
attachments.feature
1
2
3
4
5
6
7
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
Feature: Attachments
Background:
Given a file named "features/a.feature" with:
"""
Feature: some feature
Scenario: some scenario
Given a step
"""
And a file named "features/step_definitions/cucumber_steps.js" with:
"""
const {Given} = require('@cucumber/cucumber')
Given(/^a step$/, function() {})
"""
Scenario: Attach a buffer
Given a file named "features/support/hooks.js" with:
"""
const {Before} = require('@cucumber/cucumber')
Before(function() {
this.attach(Buffer.from([137, 80, 78, 71]), 'image/png')
})
"""
When I run cucumber-js
Then scenario "some scenario" "Before" hook has the attachments:
| DATA | MEDIA TYPE | MEDIA ENCODING |
| iVBORw== | image/png | BASE64 |
Scenario: Attach a string that is already base64 encoded
Given a file named "features/support/hooks.js" with:
"""
const {Before} = require('@cucumber/cucumber')
Before(function() {
this.attach(Buffer.from([137, 80, 78, 71]).toString('base64'), 'base64:image/png')
})
"""
When I run cucumber-js
Then scenario "some scenario" "Before" hook has the attachments:
| DATA | MEDIA TYPE | MEDIA ENCODING |
| iVBORw== | image/png | BASE64 |
Scenario: Attach a stream (callback)
Given a file named "features/support/hooks.js" with:
"""
const {Before} = require('@cucumber/cucumber')
const stream = require('stream')
Before(function(testCase, callback) {
var passThroughStream = new stream.PassThrough()
this.attach(passThroughStream, 'image/png', callback)
passThroughStream.write(Buffer.from([137, 80]))
passThroughStream.write(Buffer.from([78, 71]))
passThroughStream.end()
})
"""
When I run cucumber-js
Then scenario "some scenario" "Before" hook has the attachments:
| DATA | MEDIA TYPE | MEDIA ENCODING |
| iVBORw== | image/png | BASE64 |
Scenario: Attach a stream (promise)
Given a file named "features/support/hooks.js" with:
"""
const {Before} = require('@cucumber/cucumber')
const stream = require('stream')
Before(function() {
var passThroughStream = new stream.PassThrough()
var promise = this.attach(passThroughStream, 'image/png')
passThroughStream.write(Buffer.from([137, 80]))
passThroughStream.write(Buffer.from([78, 71]))
passThroughStream.end()
return promise
})
"""
When I run cucumber-js
Then scenario "some scenario" "Before" hook has the attachments:
| DATA | MEDIA TYPE | MEDIA ENCODING |
| iVBORw== | image/png | BASE64 |
Scenario: Attach from a before hook
Given a file named "features/support/hooks.js" with:
"""
const {Before} = require('@cucumber/cucumber')
Before(function() {
this.attach("text")
})
"""
When I run cucumber-js
Then scenario "some scenario" "Before" hook has the attachments:
| DATA | MEDIA TYPE | MEDIA ENCODING |
| text | text/plain | IDENTITY |
Scenario: Attach from an after hook
Given a file named "features/support/hooks.js" with:
"""
const {After} = require('@cucumber/cucumber')
After(function() {
this.attach("text")
})
"""
When I run cucumber-js
Then scenario "some scenario" "After" hook has the attachments:
| DATA | MEDIA TYPE | MEDIA ENCODING |
| text | text/plain | IDENTITY |
Scenario: Attach from a step definition
Given a file named "features/step_definitions/cucumber_steps.js" with:
"""
const {Given} = require('@cucumber/cucumber')
Given(/^a step$/, function() {
this.attach("text")
})
"""
When I run cucumber-js
Then scenario "some scenario" step "Given a step" has the attachments:
| DATA | MEDIA TYPE | MEDIA ENCODING |
| text | text/plain | IDENTITY |
@spawn
Scenario: Attaching after hook/step finishes
Given a file named "features/support/hooks.js" with:
"""
const {After} = require('@cucumber/cucumber')
After(function() {
// Do not use the callback / promise interface so that the attach happens after the hook completes
setTimeout(() => {
this.attach("text")
}, 100)
})
"""
When I run cucumber-js
Then it fails
And the error output contains the text:
"""
Cannot attach when a step/hook is not running. Ensure your step/hook waits for the attach to finish.
"""