Возврат результатов асинхронного массива в Javascript с использованием ES6 - PullRequest
0 голосов
/ 11 декабря 2018

Я новичок в Javascript и изо всех сил пытаюсь понять, как или, по крайней мере, как лучше вернуть значения массива в другой скрипт, чтобы подтвердить их значения.

В контексте я хочу использовать Puppeteer для получения некоторых строковых значений из атрибутов WebElement, а затем использовать библиотеку ожидания Chai для подтверждения правильных значений (или иным образом).

Код, который я имею до сих пор:

//app.spec.js
const clothingChoice = await frame.$eval('#option-clothing-5787', e => e.getAttribute('value'));
const groceryChoice = await frame.$eval('#option-clothing-4556', e => e.getAttribute('value'));
const wineChoice = await frame.$eval('#option-clothing-4433', e => e.getAttribute('value'));
const voucherChoice = await frame.$eval('#option-clothing-3454', e => e.getAttribute('value'));

function testFunction() {
  return new Promise(function(resolve, reject) {
    resolve([clothingChoice, groceryChoice, wineChoice, voucherChoice]);
  });
}

async function getChosenItemValues() {
  const [clothingChoice, groceryChoice, wineChoice, voucherChoice] = await testFunction();

  console.log(clothingChoice, groceryChoice, wineChoice, voucherChoice);

}

getChosenItemValues();

module.exports = getChosenItemValues;

};

Мне просто нужно понять, как импортировать значения, которые в данный момент просто распечатываются как:

1|clothing|option 1|grocery|option 1|wine|option 1|voucher|option

... в другой файл test.js в котором я хочу использовать чай, чтобы утверждать их присутствие следующим образом:

expect(clothingChoice).to.equal('1|clothing|option');

1 Ответ

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

Попробуйте это:

// app.spec.js (.spec is normally reserved for test files, you may to change the name to avoid confusion)
const clothingChoice = frame.$eval('#option-clothing-5787', e => e.getAttribute('value'));
const groceryChoice = frame.$eval('#option-clothing-4556', e => e.getAttribute('value'));
const wineChoice = frame.$eval('#option-clothing-4433', e => e.getAttribute('value'));
const voucherChoice = frame.$eval('#option-clothing-3454', e => e.getAttribute('value'));

async function getChosenItemValues() { 
    return await Promise.all([clothingChoice, groceryChoice, wineChoice, voucherChoice]);
}

module.exports = {
    getChosenItemValues
};  

ПРИМЕЧАНИЕ: frame.$eval определенно возвращает Promise?У меня не было никакого опыта с Кукольником.

// test file
const app = require('/path/to/app.spec.js');

describe('Suite', function() {
    it('Returns expected values', function(done) {
        app.getChosenItemValues()
            .then(res => {
                const [clothingChoice, groceryChoice, wineChoice, voucherChoice] = res;

                // assertions here

                done();
            });
    });
});

Извините, если тестовые функции не в правильном формате, я не использую Mocha или Chai.

...