Совместное использование значения константы между двумя файлами Javascript - PullRequest
0 голосов
/ 07 декабря 2018

Я новичок в JS и Node в целом.Я пытаюсь использовать Puppeteer, чтобы просто получить текстовое значение тега

и сохранить его в константе.Затем я пытаюсь использовать значение в «базовом» классе (index.js), где живут мои тесты Mocha.По какой-то причине я борюсь.Я использую async.

Моя файловая структура:

enter image description here

Вот мой скрипт Puppeteer:

//customerChoices.js
module.exports = async(page) => {

  const frame = page.frames().find(frame => frame.name() === 'iframe');

  const saveYourChoicesButton = await frame.$('body > div > div > div > form > footer > div > button.permissions-block__submit');
  await saveYourChoicesButton.click({});

  await page.waitForSelector('.page-title');
  const confirmationMessageText = await frame.$eval('.submission-response__copy > p', e => e.textContent);

return confirmationMessageText

};

Вот мой скрипт index.js, в котором я пытаюсь импортировать константуificationMessageText и использовать ее в тесте:

const confMessage = require('./test/uiTests/customerChoices');
const expect = require('chai').expect;
const puppeteer = require('puppeteer');
const _ = require('lodash');
const chai = require('chai');

describe('Update customer choices', function() {

      it('test all customer choices', async function() {
        const url = _.get(url, `${env}`);
        await page.goto(url);

        await customerChoices(page);
        const cm = awaitCustomerChoices(page);
        expect(cm).to.equal('Thank you. Your choices have been updated.');
      expect(cm).to.equal('Thank you. Your choices have been updated.');
        console.log(confirmationMessageText);
      });

Мне неясно, почему для параметра messageMessageText указано "Спасибо. Ваш выбор обновлен".из сценария Puppeteer, но 'undefined' из index.js?

В случае, если это полезно, мой package.json выглядит так:

"engines": {
  "node": ">=6"
},
"dependencies": {
  "chai": "^4.1.2",
  "lodash": "^4.17.10",
  "mocha": "^5.2.0",
  "moment": "^2.22.2",
  "newman": "^4.0.1",
  "puppeteer": "^1.6.2",
  "yargs": "^12.0.1",
  "express": "^4.16.4",
  "supertest": "^3.3.0"
},
"devDependencies": {
  "chai-as-promised": "^7.1.1",
  "express": "^4.16.4",
  "supertest": "^3.3.0"
}
}

1 Ответ

0 голосов
/ 07 декабря 2018

module.exports не должно изменяться асинхронно, особенно если оно должно быть изменено при вызове функции.Модули CommonJS оцениваются один раз, confMessage - это async(page) => {...} функция.

Функция должна просто возвращать результат:

module.exports = async(page) => {
  ...
  return confirmationMessageText;
};

И используется как:

const cm = await customerChoices(page);
...