Skip to content

Commit bc21574

Browse files
feat(driver): Add overwrite option to Cypress.Screenshot.defaults (#18457)
1 parent 4f38ffd commit bc21574

File tree

5 files changed

+61
-1
lines changed

5 files changed

+61
-1
lines changed

packages/driver/cypress/integration/cypress/screenshot_spec.js

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ const { Screenshot } = Cypress
33
const DEFAULTS = {
44
capture: 'fullPage',
55
scale: false,
6+
overwrite: false,
67
disableTimersAndAnimations: true,
78
screenshotOnRunFailure: true,
89
blackout: [],
@@ -64,6 +65,14 @@ describe('src/cypress/screenshot', () => {
6465
expect(Screenshot.getConfig().scale).to.equal(true)
6566
})
6667

68+
it('sets overwrite if specified', () => {
69+
Screenshot.defaults({
70+
overwrite: true,
71+
})
72+
73+
expect(Screenshot.getConfig().overwrite).to.equal(true)
74+
})
75+
6776
it('sets disableTimersAndAnimations if specified', () => {
6877
Screenshot.defaults({
6978
disableTimersAndAnimations: false,
@@ -187,6 +196,20 @@ describe('src/cypress/screenshot', () => {
187196
.and.eq('https://on.cypress.io/screenshot-api')
188197
})
189198

199+
it('throws if overwrite is not a boolean', () => {
200+
const fn = () => {
201+
Screenshot.defaults({ overwrite: 'foo' })
202+
}
203+
204+
expect(fn).to.throw()
205+
.with.property('message')
206+
.and.include('`Cypress.Screenshot.defaults()` `overwrite` option must be a boolean. You passed: `foo`')
207+
208+
expect(fn).to.throw()
209+
.with.property('docsUrl')
210+
.and.eq('https://on.cypress.io/screenshot-api')
211+
})
212+
190213
it('throws if disableTimersAndAnimations is not a boolean', () => {
191214
const fn = () => {
192215
Screenshot.defaults({ disableTimersAndAnimations: 'foo' })

packages/driver/src/cypress/screenshot.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ const _reset = () => {
1212
disableTimersAndAnimations: true,
1313
screenshotOnRunFailure: true,
1414
blackout: [],
15+
overwrite: false,
1516
onBeforeScreenshot () {},
1617
onAfterScreenshot () {},
1718
}

packages/runner/__snapshots__/retries.mochaEvents.spec.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6476,6 +6476,7 @@ exports['src/cypress/runner retries mochaEvents screenshots retry screenshot in
64766476
"height": 660
64776477
},
64786478
"scaled": false,
6479+
"overwrite": false,
64796480
"blackout": [],
64806481
"startTime": "match.string",
64816482
"current": 1,
@@ -6491,7 +6492,8 @@ exports['src/cypress/runner retries mochaEvents screenshots retry screenshot in
64916492
"scale": false,
64926493
"waitForCommandSynchronization": false,
64936494
"disableTimersAndAnimations": true,
6494-
"blackout": []
6495+
"blackout": [],
6496+
"overwrite": false
64956497
}
64966498

64976499
exports['serialize state - retries'] = {

packages/runner/__snapshots__/runner.mochaEvents.spec.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1939,6 +1939,7 @@ exports['src/cypress/runner other specs screenshots screenshot after failed test
19391939
"height": 660
19401940
},
19411941
"scaled": true,
1942+
"overwrite": false,
19421943
"blackout": [],
19431944
"startTime": "1970-01-01T00:00:00.000Z"
19441945
}

packages/server/test/support/fixtures/projects/e2e/cypress/integration/screenshots_spec.js

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -333,6 +333,39 @@ describe('taking screenshots', () => {
333333
})
334334
})
335335

336+
// @see https://github.com/cypress-io/cypress/issues/7955
337+
it('can set overwrite default option to replace existing filename', () => {
338+
Cypress.Screenshot.defaults({
339+
overwrite: true,
340+
})
341+
342+
cy.viewport(600, 200)
343+
cy.visit('http://localhost:3322/color/yellow')
344+
cy.screenshot('overwrite-test', {
345+
clip: { x: 10, y: 10, width: 160, height: 80 },
346+
})
347+
348+
cy.task('check:screenshot:size', {
349+
name: `${path.basename(__filename)}/overwrite-test.png`,
350+
width: 160,
351+
height: 80,
352+
devicePixelRatio,
353+
})
354+
355+
cy.screenshot('overwrite-test', {
356+
clip: { x: 10, y: 10, width: 100, height: 50 },
357+
})
358+
359+
cy.readFile(`cypress/screenshots/${path.basename(__filename)}/overwrite-test (1).png`).should('not.exist')
360+
361+
cy.task('check:screenshot:size', {
362+
name: `${path.basename(__filename)}/overwrite-test.png`,
363+
width: 100,
364+
height: 50,
365+
devicePixelRatio,
366+
})
367+
})
368+
336369
context('before hooks', () => {
337370
before(() => {
338371
// failure 2

0 commit comments

Comments
 (0)