mirror of
https://github.com/datashard/snapshot.git
synced 2024-11-21 13:42:28 +00:00
Automatically update Snapshots using Env Variable (#6)
This commit is contained in:
parent
5a1a5981d8
commit
0d303b9da5
7 changed files with 33 additions and 35 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -2,3 +2,4 @@ node_modules/
|
||||||
.DS_Store
|
.DS_Store
|
||||||
npm-debug.log
|
npm-debug.log
|
||||||
cypress/videos/
|
cypress/videos/
|
||||||
|
cypress/screenshots/
|
||||||
|
|
|
@ -118,6 +118,9 @@ This module provides some configuration options:
|
||||||
#### snapshotPath
|
#### snapshotPath
|
||||||
|
|
||||||
Sets the default Path for saving Snapshots (default: `cypress/snapshots`)
|
Sets the default Path for saving Snapshots (default: `cypress/snapshots`)
|
||||||
|
#### `ENV` CYPRESS_UPDATE_SNAPSHOTS
|
||||||
|
|
||||||
|
Lets you pass a Env Variable to update failing Tests with the new Data
|
||||||
|
|
||||||
#
|
#
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* eslint-env mocha */
|
/* eslint-env mocha */
|
||||||
/* global cy */
|
/* global cy */
|
||||||
describe("@cypress/snapshot", () => {
|
describe("@datashard/snapshot", () => {
|
||||||
context("simple types", () => {
|
context("simple types", () => {
|
||||||
it("works with objects", () => {
|
it("works with objects", () => {
|
||||||
cy.fixture("File2").snapshot({
|
cy.fixture("File2").snapshot({
|
||||||
|
@ -23,11 +23,19 @@ describe("@cypress/snapshot", () => {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
it("works with arrays", () => {
|
it(
|
||||||
cy.wrap([1, 2, 3]).snapshot({
|
"works with arrays",
|
||||||
snapshotPath: "cypress/snapshots",
|
{
|
||||||
snapshotName: "Arrays",
|
env: {
|
||||||
});
|
SNAPSHOT_UPDATE: true,
|
||||||
});
|
},
|
||||||
|
},
|
||||||
|
() => {
|
||||||
|
cy.wrap([1, 2, 3, 4]).snapshot({
|
||||||
|
snapshotPath: "cypress/snapshots",
|
||||||
|
snapshotName: "Arrays",
|
||||||
|
});
|
||||||
|
}
|
||||||
|
);
|
||||||
});
|
});
|
||||||
});
|
});
|
|
@ -39,6 +39,7 @@
|
||||||
"unused-deps": "dependency-check --unused --no-dev . --entry src/index.js",
|
"unused-deps": "dependency-check --unused --no-dev . --entry src/index.js",
|
||||||
"semantic-release": "semantic-release",
|
"semantic-release": "semantic-release",
|
||||||
"cypress:open": "cypress open",
|
"cypress:open": "cypress open",
|
||||||
|
"cypress:update": "cypress run --env SNAPSHOT_UPDATE=true",
|
||||||
"cypress:run": "cypress run"
|
"cypress:run": "cypress run"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
|
|
@ -1,13 +0,0 @@
|
||||||
const api = require(".");
|
|
||||||
const la = require("lazy-ass");
|
|
||||||
const is = require("check-more-types");
|
|
||||||
|
|
||||||
describe("@datashard/snapshot", () => {
|
|
||||||
it("is an object", () => {
|
|
||||||
la(is.object(api));
|
|
||||||
});
|
|
||||||
|
|
||||||
it("has register", () => {
|
|
||||||
la(is.fn(api.register));
|
|
||||||
});
|
|
||||||
});
|
|
|
@ -41,7 +41,7 @@ const store_snapshot = (store, props = { value, name, path, raiser }) => {
|
||||||
|
|
||||||
const expectedPath = path.join(snapshotPath, `${fileName}.json`);
|
const expectedPath = path.join(snapshotPath, `${fileName}.json`);
|
||||||
cy.task("readFileMaybe", expectedPath).then((exist) => {
|
cy.task("readFileMaybe", expectedPath).then((exist) => {
|
||||||
if (exist) {
|
if (exist && !Cypress.env().SNAPSHOT_UPDATE) {
|
||||||
props.raiser({ value: props.value, expected: JSON.parse(exist) });
|
props.raiser({ value: props.value, expected: JSON.parse(exist) });
|
||||||
} else {
|
} else {
|
||||||
cy.writeFile(expectedPath, JSON.stringify(props.value));
|
cy.writeFile(expectedPath, JSON.stringify(props.value));
|
||||||
|
@ -56,7 +56,6 @@ const set_snapshot = (
|
||||||
if (!store) return;
|
if (!store) return;
|
||||||
|
|
||||||
const message = Cypress._.last(snapshotName);
|
const message = Cypress._.last(snapshotName);
|
||||||
console.log("Current Snapshot name", snapshotName);
|
|
||||||
|
|
||||||
const devToolsLog = { $el: serialized };
|
const devToolsLog = { $el: serialized };
|
||||||
|
|
||||||
|
@ -74,16 +73,18 @@ const set_snapshot = (
|
||||||
|
|
||||||
const raiser = ({ value, expected }) => {
|
const raiser = ({ value, expected }) => {
|
||||||
const result = compareValues({ expected, value });
|
const result = compareValues({ expected, value });
|
||||||
result.orElse((json) => {
|
if (!Cypress.env().SNAPSHOT_UPDATE && result.value) {
|
||||||
devToolsLog.message = json.message;
|
result.orElse((json) => {
|
||||||
devToolsLog.expected = expected;
|
devToolsLog.message = json.message;
|
||||||
delete devToolsLog.value;
|
devToolsLog.expected = expected;
|
||||||
devToolsLog.value = value;
|
delete devToolsLog.value;
|
||||||
|
devToolsLog.value = value;
|
||||||
|
|
||||||
throw new Error(
|
throw new Error(
|
||||||
`Snapshot Difference. To update, delete snapshot file and rerun test.\n${json.message}`
|
`Snapshot Difference.\nPlease Update the Snapshot\n\n\t${json.message}`
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
}
|
||||||
};
|
};
|
||||||
Cypress.log(options);
|
Cypress.log(options);
|
||||||
|
|
||||||
|
@ -95,9 +96,8 @@ const set_snapshot = (
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
const get_test_name = (test) => test.titlePath;
|
|
||||||
const get_snapshot_name = (test, custom_name) => {
|
const get_snapshot_name = (test, custom_name) => {
|
||||||
const names = get_test_name(test);
|
const names = test.titlePath;
|
||||||
|
|
||||||
const index = custom_name;
|
const index = custom_name;
|
||||||
names.push(String(index));
|
names.push(String(index));
|
||||||
|
@ -110,7 +110,6 @@ module.exports = (value, step, options) => {
|
||||||
if (typeof step === "object") options = step;
|
if (typeof step === "object") options = step;
|
||||||
if (typeof value !== "object" || Array.isArray(value))
|
if (typeof value !== "object" || Array.isArray(value))
|
||||||
value = { data: value };
|
value = { data: value };
|
||||||
console.log("value", value);
|
|
||||||
|
|
||||||
const name = get_snapshot_name(
|
const name = get_snapshot_name(
|
||||||
Cypress.currentTest,
|
Cypress.currentTest,
|
||||||
|
@ -120,7 +119,6 @@ module.exports = (value, step, options) => {
|
||||||
const serialized = serializer(value);
|
const serialized = serializer(value);
|
||||||
const store = newStore(serialized || {});
|
const store = newStore(serialized || {});
|
||||||
|
|
||||||
console.log({ step, options });
|
|
||||||
set_snapshot(store, {
|
set_snapshot(store, {
|
||||||
snapshotName: name,
|
snapshotName: name,
|
||||||
snapshotPath: options.snapshotPath,
|
snapshotPath: options.snapshotPath,
|
||||||
|
|
Loading…
Reference in a new issue