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 });
