Объект "undefined" в скрипте Mocha.Не уверен, как передать значение - PullRequest
0 голосов
/ 30 мая 2019

Я запускаю тест мокко на нескольких конечных точках и не могу передать результаты следующему тестовому сценарию. Сбой в строке var result = data["results"]; error:data undefined


    it('should get series', async () => {
        let data = await legacy.getCategories(config[process.env.TEST_ENV].url, config[process.env.TEST_ENV].origin);
        console.log(data);
        expect(data).to.be.an('array').that.is.not.empty;
        done();
    });

    var unallowedGuids = config[process.env.TEST_ENV].unallowedGuids;
    var result = data["results"];

    for (i = 0; i < result.length; i++) { 
        let guid = result[i]["guid"];
        let showName = result[i]["title"];
        if (!unallowedGuids.includes(guid)){
                it('should get colletions guid', async () => {
                let data = await legacy.collectionsGuid(config[process.env.TEST_ENV].url, config[process.env.TEST_ENV].origin, guid);
                expect(data).to.be.an('array').that.is.not.empty;
                done();
    });
                it('should get series guid', async () => {
                let data = await legacy.seriesGuid(config[process.env.TEST_ENV].url, config[process.env.TEST_ENV].origin, guid);
                expect(data).to.be.an('array').that.is.not.empty;
                done();
    });
        } 
        else
            console.log("excluded", guid);
    }

});```

Ответы [ 2 ]

0 голосов
/ 05 июня 2019

Для вашего случая вы получили неопределенное значение, потому что var result = data["results"]; выполняется первым перед вашей it('should get series', ..) функцией.

Одним из решений является реструктуризация теста, чтобы убедиться в правильности порядка выполнения.Мы можем использовать before() или beforeEach() Например:

let data;

before(async () => {
  data = await legacy.getCategories(config[process.env.TEST_ENV].url, config[process.env.TEST_ENV].origin);                
});

it('get collection and series guid', async function() {
  var unallowedGuids = config[process.env.TEST_ENV].unallowedGuids;
  var result = data["results"]; // it will be executed after data is fetched in `before()`

  for (i = 0; i < result.length; i++) { 
      let guid = result[i]["guid"];
      let showName = result[i]["title"];
      if (!unallowedGuids.includes(guid)){
        let data = await legacy.collectionsGuid(config[process.env.TEST_ENV].url, config[process.env.TEST_ENV].origin, guid);
        expect(data).to.be.an('array').that.is.not.empty;

        let data = await legacy.seriesGuid(config[process.env.TEST_ENV].url, config[process.env.TEST_ENV].origin, guid);
        expect(data).to.be.an('array').that.is.not.empty;
      } 
      else {
        console.log("excluded", guid);
      }
  }
});

Кроме того, вы также можете поместить выборку данных в ту же it() функцию

// no before()

it('get collection and series guid', async function() {
  var unallowedGuids = config[process.env.TEST_ENV].unallowedGuids;

  var data = await legacy.getCategories(config[process.env.TEST_ENV].url, config[process.env.TEST_ENV].origin);
  var result = data["results"];

  ....
});

Надеюсь, это поможет

0 голосов
/ 30 мая 2019

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

Попробуйте изменить код следующим образом:

    let data; // initialize "data" outside of the "it" callback function

    it('should get series', async () => {
      data = await legacy.getCategories(config[process.env.TEST_ENV].url, config[process.env.TEST_ENV].origin);
      console.log(data);
      expect(data).to.be.an('array').that.is.not.empty;
      done();
    });

    var unallowedGuids = config[process.env.TEST_ENV].unallowedGuids;
    var result = data["results"]; // data will be defined here
...