Как прочитать файл перед запуском теста мокко - PullRequest
3 голосов
/ 08 апреля 2019

Я пытаюсь прочитать файл, который содержит все входные данные для набора теста мокко. При попытке прочитать этот файл я просто получаю, что входные данные (карта) является нулевым.

Scrapper_cheerio.js написан в формате async / await, однако, не верьте, что это имеет отношение к файлу, который не читается.

если я правильно понял до этого, вещи в блоке before должны происходить до начала любого теста. В настоящее время это то, что я пробовал:

const assert = require('chai').assert;
const fs = require('fs');

const scrapper_cheerio = require('../scrapper/Scrapper_cheerio');
describe('test1', function(){
    var inputs = null;
    before( function(done){
        fs.readFile('./inputs.txt', 'utf8', 
            function(err, fileContents){
                if(err) throw err;
                const string_data = fileContents;
                const data = eval(string_data);
                inputs = new Map(data);
                done();
            });
    });

    describe('is_null_input()', function(){
        const is_null_input = inputs.get('is_null_input');
        const json_result = scrapper_cheerio.is_null_json(is_null_input);
        it('should return a json string', function(){
            assert.isObject(json_result, 'is json object');
       }); 
    });

});

Я просто ожидаю, что этот первый тест будет правдой, потому что он оказывается самым простым для тестирования, однако я не могу прочитать файл. Я очень новичок в тестировании мокко, поэтому, возможно, у меня есть и, вероятно, есть некоторые явные и очевидные ошибки Любая помощь очень ценится.

Редактировать 1:

поэтому перед быстрым удалением было указано (почему это было действительно полезно, спасибо.), Что мне нужно сделать асинхронный вызов, и я это сделал. Теперь я могу прочитать файл, и я вижу, что я читаю его, однако я не могу передать значение в нижнюю часть

    describe('test1', function(done){
        var inputs = null;

        before('test1', function() {
            const string_data = fs.readFileSync('./inputs.txt', 'utf8');
            const data = eval(string_data);
            console.log('data uptop')
            inputs = new Map(data);
            console.log(inputs);
            done();
        });

        describe('is_null_input()', function(done){
            const is_null_input = inputs.get('is_null_input');
            var json_result = scrapper_cheerio.is_null_json(is_null_input);
            console.log('these are json results', json_result);
            it('should return a json string', function(){
                assert.isObject(json_result, 'is json object');
        }); 
        });

    });

Так что я могу прочитать файл, однако он не доступен в описании.

1 Ответ

1 голос
/ 08 апреля 2019

Вот упрощенный рабочий тест, который должен дать вам быстрый старт:

input.txt

[[ 'is_null_input', true ]]

code.test.js

const fs = require('fs');
const expect = require('chai').expect;

describe('test1', function () {
  var inputs = null;

  before('test1', function (done) {
    fs.readFile('./inputs.txt', 'utf8', (err, data) => {
      if (err) throw err;
      inputs = new Map(eval(data));
      done();
    });
  });

  describe('is_null_input()', function () {
    it('should return a json string', function () {
      const is_null_input = inputs.get('is_null_input');
      expect(is_null_input).to.equal(true);  // Success!
      // ...
      // var json_result = scrapper_cheerio.is_null_json(is_null_input);
      // console.log('these are json results', json_result);
      // assert.isObject(json_result, 'is json object');
    });
  });

});

Подробности

Цикл запуска Мокко сначала запускает все describe обратные вызовы, а describe обратные вызовы всегда выполняются синхронно (вы не можете использовать done,async или возврат Promise в describe обратном вызове.

Итак, эта строка:

const is_null_input = inputs.get('is_null_input');

... работала до before, что означаетinputs по-прежнему null.

Перемещение этого кода внутри теста означает, что он будет работать после того, как будут определены , before и inputs.

Рекомендуется не блокировать цикл событий JavaScript с помощью readFileSync, поэтому в приведенном выше примере используется done в сочетании с readFile.

.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...