Как правильно протестировать функцию, использующую функции ax ios .get и cheer ios .load с mocha и chai? - PullRequest
1 голос
/ 11 апреля 2020

У меня есть этот индекс. js file

    const axios = require("axios");
    const cheerio = require('cheerio');

    const fetchData = async (webpage) => {
        const result = await axios.get(webpage);
        return cheerio.load(result.data);
    }
    const extractData = async (webPage) => {
        const $ = await fetchData(webPage);
        const numMains = $('.rank').text();
        //Should return the following string 
        //1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.
        return numMains;
    }

    const siteUrl = "https://news.ycombinator.com/";

    (async (webPage) => {console.log(await extractData(webPage));})(siteUrl);

    module.exports = {
        extractData: extractData
    }

И у меня есть этот тест. js file

    var chai = require('chai');
    var expect = chai.expect;
    var functionNames = require('../index.js');

    describe('extractData() Unit-Test', () => {
      it('This function should return a given string', () => {

        // 1. ARRANGE
        const siteUrl = "https://news.ycombinator.com/";
        const shouldResult = "1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.";

        // 2. ACT
        const result = functionNames.extractData(siteUrl);

        // 3. ASSERT
        expect(result).to.be.equal(shouldResult);

      });
    });

* Я не получаю проход с этой ошибкой AssertionError : *

    AssertionError: expected {} to equal '1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.'

Кто-то знает, что я делаю неправильно и как я могу решить эту проблему?

Ответы [ 2 ]

1 голос
/ 11 апреля 2020

В качестве альтернативы решению Маркоса вы также можете использовать eventually от chai:

result.should.eventually.equal(shouldResult);

Документация здесь: https://www.chaijs.com/plugins/chai-as-promised/

1 голос
/ 11 апреля 2020

Вам не хватает await, вы сравниваете Promise с 1,2,3 ...

it('This function should return a given string', async() => {

        // 1. ARRANGE
        const siteUrl = "https://news.ycombinator.com/";
        const shouldResult = "1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.";

        // 2. ACT
        const result = await functionNames.extractData(siteUrl);

        // 3. ASSERT
        expect(result).to.be.equal(shouldResult);

});

Имейте в виду, что вы фактически выполняете запрос, выполняя проверить, если сайт не работает, проверка не будет выполнена. Если вы не хотите этого, вы можете смоделировать запрос, используя nock или аналогичный пакет.

...