typescript - Hvorfor får jeg feilen `TypeError: fs.readdir er ikke en funksjon` i Cypress


Jeg skrev denne koden og den fungerer fint, den er skrevet i TypeScript. Når jeg bruker den samme koden i testfilen i Cypress får jeg feilen TypeError: fs.readdir er not a function

import * as fs from 'fs'

let inputPath: String = "C:\\Users\\rkon";
let replacementString = "/";
let newInputPath = inputPath.split('\\').join(replacementString)
console.log('path after replacement: ' + newInputPath);

fs.readdir(newInputPath as string, function (err: any, files: any[]) {
    //handling error
    if (err) {
        return console.log('Unable to scan directory: ' + err);
    }
    //listing all files using forEach
    files.forEach(function (file) {
        console.log('file: ' + file);
    });
});

Jeg verifiserte koden ovenfor ved først å gjøre:

>tsc temp.ts
>node temp.js

Som jeg sa, det fungerte bra, men hvorfor fungerer ikke den samme koden i Cypress og gir følgende feil:

TypeError: fs.readdir er ikke en funksjon

Svar #1

du kan ikke bruke node-moduler innenfor cypress fordi cypress kjører testkoden i nettleseren. For å bruke node-moduler må du bruke oppgaver (som kjøres i node-prosessen) som er definert i plugins-filen (viktig, fordi plugins-filen kjøres i node-konteksten).

Så du må fortelle Cypress i cypress.json at du bruker en plugins-fil:

{
    ...
    "pluginsFile": "cypress/plugins/plugins.js",
    ...
  }

Definer deretter en oppgave i plugins.js:

on('task', {
    readdir({ path }) {
      return fs.readdir(path, .....);
    }
  });

Bruk oppgaven slik:

cy.task("readdir", { path: "..." }, { timeout: 30000 });

Relaterte artikler