mermaid/cypress/examples/utilities.spec.js

130 lines
4.0 KiB
JavaScript
Raw Normal View History

/// <reference types="Cypress" />
context('Utilities', () => {
beforeEach(() => {
2022-02-10 20:32:21 +01:00
cy.visit('https://example.cypress.io/utilities');
});
it('Cypress._ - call a lodash method', () => {
// https://on.cypress.io/_
2022-02-10 20:32:21 +01:00
cy.request('https://jsonplaceholder.cypress.io/users').then((response) => {
let ids = Cypress._.chain(response.body).map('id').take(3).value();
2022-02-10 20:32:21 +01:00
expect(ids).to.deep.eq([1, 2, 3]);
});
});
it('Cypress.$ - call a jQuery method', () => {
// https://on.cypress.io/$
2022-02-10 20:32:21 +01:00
let $li = Cypress.$('.utility-jquery li:first');
2022-02-10 20:32:21 +01:00
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) =>
2022-02-10 20:32:21 +01:00
// 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
2022-02-10 20:32:21 +01:00
let 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
2022-02-10 20:32:21 +01:00
$div.append(img);
2022-02-10 20:32:21 +01:00
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,
2022-02-10 20:32:21 +01:00
});
2022-02-10 20:32:21 +01:00
expect(matching, 'matching wildcard').to.be.true;
matching = Cypress.minimatch('/users/1/comments/2', '/users/*/comments', {
matchBase: true,
2022-02-10 20:32:21 +01:00
});
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,
2022-02-10 20:32:21 +01:00
});
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,
2022-02-10 20:32:21 +01:00
});
expect(matching, 'comments').to.be.false;
});
it('Cypress.moment() - format or parse dates using a moment method', () => {
// https://on.cypress.io/moment
2022-02-10 20:32:21 +01:00
const time = Cypress.moment().utc('2014-04-25T19:38:53.196Z').format('h:mm A');
2022-02-10 20:32:21 +01:00
expect(time).to.be.a('string');
2022-02-10 20:32:21 +01:00
cy.get('.utility-moment').contains('3:38 PM').should('have.class', 'badge');
// the time in the element should be between 3pm and 5pm
2022-02-10 20:32:21 +01:00
const start = Cypress.moment('3:00 PM', 'LT');
const end = Cypress.moment('5:00 PM', 'LT');
2022-02-10 20:32:21 +01:00
cy.get('.utility-moment .badge').should(($el) => {
// parse American time like "3:38 PM"
const m = Cypress.moment($el.text().trim(), 'LT');
2022-02-10 20:32:21 +01:00
// display hours + minutes + AM|PM
const f = 'h:mm A';
2022-02-10 20:32:21 +01:00
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
2022-02-10 20:32:21 +01:00
let waited = false;
2022-02-10 20:32:21 +01:00
/** @returns 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
2022-02-10 20:32:21 +01:00
waited = true;
// resolve with 'foo' string
2022-02-10 20:32:21 +01:00
resolve('foo');
}, 1000);
});
}
cy.then(() =>
2022-02-10 20:32:21 +01:00
// return a promise to cy.then() that
// is awaited until it resolves
// @ts-ignore TS7006
waitOneSecond().then((str) => {
2022-02-10 20:32:21 +01:00
expect(str).to.eq('foo');
expect(waited).to.be.true;
})
);
});
});