PromucFlow_constructor/app/client/cypress/integration/examples/utilities.spec.js
2019-12-12 07:50:53 +00:00

146 lines
4.1 KiB
JavaScript

/// <reference types="Cypress" />
context("Utilities", () => {
beforeEach(() => {
cy.visit("https://example.cypress.io/utilities");
});
it("Cypress._ - call a lodash method", () => {
// https://on.cypress.io/_
cy.request("https://jsonplaceholder.cypress.io/users").then(response => {
const ids = Cypress._.chain(response.body)
.map("id")
.take(3)
.value();
expect(ids).to.deep.eq([1, 2, 3]);
});
});
it("Cypress.$ - call a jQuery method", () => {
// https://on.cypress.io/$
const $li = Cypress.$(".utility-jquery li:first");
cy.wrap($li)
.should("not.have.class", "active")
.click()
.should("have.class", "active");
});
it("Cypress.Blob - blob utilities and base64 string conversion", () => {
// https://on.cypress.io/blob
cy.get(".utility-blob").then($div =>
// https://github.com/nolanlawson/blob-util#imgSrcToDataURL
// get the dataUrl string for the javascript-logo
Cypress.Blob.imgSrcToDataURL(
"https://example.cypress.io/assets/img/javascript-logo.png",
undefined,
"anonymous",
).then(dataUrl => {
// create an <img> element and set its src to the dataUrl
const img = Cypress.$("<img />", { src: dataUrl });
// need to explicitly return cy here since we are initially returning
// the Cypress.Blob.imgSrcToDataURL promise to our test
// append the image
$div.append(img);
cy.get(".utility-blob img")
.click()
.should("have.attr", "src", dataUrl);
}),
);
});
it("Cypress.minimatch - test out glob patterns against strings", () => {
// https://on.cypress.io/minimatch
let matching = Cypress.minimatch("/users/1/comments", "/users/*/comments", {
matchBase: true,
});
expect(matching, "matching wildcard").to.be.true;
matching = Cypress.minimatch("/users/1/comments/2", "/users/*/comments", {
matchBase: true,
});
expect(matching, "comments").to.be.false;
// ** matches against all downstream path segments
matching = Cypress.minimatch("/foo/bar/baz/123/quux?a=b&c=2", "/foo/**", {
matchBase: true,
});
expect(matching, "comments").to.be.true;
// whereas * matches only the next path segment
matching = Cypress.minimatch("/foo/bar/baz/123/quux?a=b&c=2", "/foo/*", {
matchBase: false,
});
expect(matching, "comments").to.be.false;
});
it("Cypress.moment() - format or parse dates using a moment method", () => {
// https://on.cypress.io/moment
const time = Cypress.moment("2014-04-25T19:38:53.196Z")
.utc()
.format("h:mm A");
expect(time).to.be.a("string");
cy.get(".utility-moment")
.contains("3:38 PM")
.should("have.class", "badge");
// the time in the element should be between 3pm and 5pm
const start = Cypress.moment("3:00 PM", "LT");
const end = Cypress.moment("5:00 PM", "LT");
cy.get(".utility-moment .badge").should($el => {
// parse American time like "3:38 PM"
const m = Cypress.moment($el.text().trim(), "LT");
// display hours + minutes + AM|PM
const f = "h:mm A";
expect(
m.isBetween(start, end),
`${m.format(f)} should be between ${start.format(f)} and ${end.format(
f,
)}`,
).to.be.true;
});
});
it("Cypress.Promise - instantiate a bluebird promise", () => {
// https://on.cypress.io/promise
let waited = false;
/**
* @return Bluebird<string>
*/
function waitOneSecond() {
// return a promise that resolves after 1 second
// @ts-ignore TS2351 (new Cypress.Promise)
return new Cypress.Promise((resolve, reject) => {
setTimeout(() => {
// set waited to true
waited = true;
// resolve with 'foo' string
resolve("foo");
}, 1000);
});
}
cy.then(() =>
// return a promise to cy.then() that
// is awaited until it resolves
// @ts-ignore TS7006
waitOneSecond().then(str => {
expect(str).to.eq("foo");
expect(waited).to.be.true;
}),
);
});
});