Sé que hay muchas preguntas en Stackoverflow sobre este error, pero después de leer algunas de ellas (+-12 preguntas) no obtengo nada.
Mi contexto es que estoy tratando de construir un paquete npm (mi primer paquete); en este Paquete hay algunas clases que ayudan a escribir Cypress más fácilmente.
Esta es una de las clases que quiero cargar a través de un paquete npm:
// node_modules/prueba-para-oskar/src/Helpers/Fields/TextField.js class TextField { /** * * @param {string} value * @param {string} selector * @param {object} options */ type(value, selector, options) { this[options.widget](value,selector); } /** * * @param {string} value * @param {string} selector */ ckeditor(value, selector){ cy.ckeditor(value, selector) } noCkeditor(value, selector){ cy.get(selector).type(value); } } module.exports = TextField;Este es mi paquete index.js
// node_modules/prueba-para-oskar/src/index.js const TextField = require('./Helpers/Fields/TextField'); module.exports = { TextField }Y este es mi objeto de página de ciprés.
// cypress/e2e/pages/ArticlePage.js // If I load the file as class that are in the same folder than Cypress // (not mpn package) they works without problems. import { Property } from "../../support/Helpers/lib/Property"; import { Submit } from "../../support/Helpers/lib/Submit"; import { FileField } from "../../support/Helpers/Fields/FileField"; import { TextAreaField } from "../../support/Helpers/Fields/TextAreaField"; // import { TextField } from "../../support/Helpers/Fields/TextField"; import { TextField } from "prueba-para-oskar"; export default class ArticlePage { article_path = "/node/add/article"; tagInput = 'input[data-drupal-selector="edit-field-tags-target-id"]'; submitButton = 'input[data-drupal-selector="edit-submit"]'; constructor() { this.Property = new Property(); this.FileField = new FileField(); this.TextAreaField = new TextAreaField(); this.TextField = new TextField(); this.Submit = new Submit(); } userCanAccesArticlePage() { cy.visit(this.article_path, { failOnStatusCode: true }); } havePermissionsToSeeNodeAddArticle() { cy.location("pathname").should("eq", this.article_path); } clickSubmitButttom() { cy.get(this.submitButton).click(); } }El error aparece cuando intento cargar TextField dentro de ArticlePage.js
¿Alguna idea de cómo cargar la clase del npm pagacke a la clase ObjecPage?
Gracias.
Consulte la respuesta a esta pregunta.
module.exports vs. exportación predeterminada en Node.js y ES6
Espero eso ayude :)
Después de dar un paseo y leer de nuevo el enlace de Aleksa Djukic, he resuelto mi problema de esta manera:
// node_modules/prueba-para-oskar/src/index.js module.exports.TextField = require('./Helpers/Fields/TextField'); // cypress/e2e/pages/ArticlePage.js // Instead of import I use require. const TextField = require("prueba-para-oskar").TextField; // cypress/support/step_definitions/articlePage.js // Instead of import I use require. const ArticlePage = require('../../e2e/pages/ArticlePage'); // I have to inicialice the class const articlePage = new ArticlePage();En un paquete npm, generalmente el index,js está en la raíz del paquete, no en /src .
Prueba de esta manera
// node_modules/prueba-para-oskar/index.js const TextField = require('./src/Helpers/Fields/TextField'); module.exports = { TextField } También (alternativamente) intente agregar una entrada main a package.json
Por ejemplo, mire node_modules/core-util-is/package.json
{ "name": "core-util-is", "version": "1.0.2", "description": "The `util.is*` functions introduced in Node v0.12.", "main": "lib/util.js", "repository": { ...por lo que su paquete.json
{ "name": "prueba-para-oskar", "version": "1.0.0", "main": "src/index.js", "scripts": { ...