File

projects/storefrontapp-e2e-cypress/cypress/helpers/viewport-context.ts

Index

Properties

Properties

height
height: number
Type : number
viewport
viewport: Viewports
Type : Viewports
width
width: number
Type : number
import { formats } from '../sample-data/viewports';

const viewportConfigs: Viewport[] = Object.entries(formats).map(
  ([key, value]) => {
    return {
      viewport: key,
      ...value,
    } as Viewport;
  }
);

type Viewports = keyof typeof formats;

interface Viewport {
  viewport: Viewports;
  width: number;
  height: number;
}

function capitalize(str: string) {
  return str[0].toUpperCase() + str.substr(1);
}

/**
 * Runs the same tests against all the provided viewports
 *
 * @param viewportList list of viewports you want to test
 * @param callback test body
 */
export function viewportContext(
  viewportList: Viewports[],
  callback: () => unknown
) {
  // When we set `CYPRESS_VIEWPORT` with one of the viewport name value we only want to run tests in this viewport.
  // eg. with `CYPRESS_VIEWPORT="desktop" tests will be run only in desktop viewport size
  const viewportFromConfig = Cypress.env('VIEWPORT');
  const viewports = viewportConfigs
    .filter((conf) => viewportList.includes(conf.viewport))
    .filter((conf) =>
      viewportFromConfig ? conf.viewport === viewportFromConfig : true
    );
  viewports.forEach((viewport: Viewport) => {
    context(
      `${capitalize(viewport.viewport)}`,
      { viewportWidth: viewport.width, viewportHeight: viewport.height },
      () => {
        callback();
      }
    );
  });
}

result-matching ""

    No results matching ""