cypress-io / cypress-skip-test

Simple commands to skip a test based on platform, browser or a url
MIT License
180 stars 10 forks source link

Typescript: Cannot both import onlyOn and use cy.onlyOn #164

Open samueldmeyer opened 3 years ago

samueldmeyer commented 3 years ago

In v2.6.0, Typescript threw errors when onlyOn was imported, but worked correctly for cy.onlyOn. Now in v2.6.1 (after https://github.com/cypress-io/cypress-skip-test/pull/143), Typescript correctly types the onlyOn import, but cy.onlyOn does not have a type.

Is there any way to get both of these to work with Typescript?

import { onlyOn } from '@cypress/skip-test'; // error here in 2.6.0: File '.../node_modules/@cypress/skip-test/index.d.ts' is not a module.
onlyOn('integration', () => {
  describe('stuff', () => {
    cy.onlyOn('mac'); // Error here in 2.6.1: Property 'onlyOn' does not exist on type 'cy & EventEmitter'
  })
});
estefafdez commented 3 years ago

+1, I'm getting this error as well:

image

any idea? thanks!

rdadoune commented 3 years ago

Looks like the types aren't being added to the global scope. The types in index.d.ts need to be updated from:

declare namespace Cypress {   
  // ... type definitions
}

To this:

declare global {
  declare namespace Cypress {
    // ... type definitions
  }
}
estefafdez commented 3 years ago

Any update on this? thanks!

conversayShawn commented 3 years ago

I was able to successfully import both by exporting the global scope in my support/index.d.ts.

Try the following:

export {};

declare global {
  namespace Cypress {
    // ... type definitions
  }
}

You can also find a minimal reproducible example here: https://github.com/conversaShawn/using-cypress-skip-test-plugin/tree/onlyOn

muratkeremozcan commented 1 year ago

Add to your cypress.d.ts file

export {}

declare global {
  namespace Cypress {
    interface Chainable<Subject> {
      /// plugins ///

      // the cypress skip-test plugin has an open issue with types, that is  we have declare these here
      // https://github.com/cypress-io/cypress-skip-test/issues/164
      /** https://www.npmjs.com/package/@cypress/skip-test
       * `cy.skipOn('sandbox')`
       */
      skipOn(
        nameOrFlag: string | boolean | (() => boolean),
        cb?: () => void,
      ): Chainable<Subject>
      /** https://www.npmjs.com/package/@cypress/skip-test
       * `cy.onlyOn('sandbox')`
       */
      onlyOn(
        nameOrFlag: string | boolean | (() => boolean),
        cb?: () => void,
      ): Chainable<Subject>

    }
  }
}