#javascript #node.js #mocha.js
#javascript #node.js #mocha.js
Вопрос:
Я пытаюсь прочитать файл, который содержит все входные данные для набора тестов mocha. При попытке прочитать этот файл я просто получаю, что входные данные (карта) равны нулю.
Scrapper_cheerio.js написан в формате async / await однако не верьте, что это имеет какое-либо отношение к тому, что файл не читается.
если я правильно понимаю before, материал в блоке 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');
});
});
});
Я просто ожидаю, что этот первый тест будет верным, потому что его проще всего протестировать, однако я не могу прочитать файл. Я новичок в тестировании mocha, поэтому у меня могут быть и, вероятно, действительно есть некоторые вопиющие и очевидные ошибки. Любая помощь приветствуется.
Редактировать 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. Что именно вызвало
is_null_input()
сбой? Вы получали какие-либо сообщения об ошибках?2. ‘Не удается прочитать свойство ‘get’ из null’ , в этом файле хранится строка в виде двумерного массива. однако я считаю, что файл не читается.
Ответ №1:
Вот упрощенный рабочий тест, который должен вас ускорить:
inputs.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');
});
});
});
Подробные сведения
Цикл выполнения Mocha сначала выполняет все describe
обратные вызовы, а describe
обратные вызовы всегда выполняются синхронно (вы не можете использовать done
, async
функцию или возвращать Promise
в describe
обратном вызове).
Итак, эта строка:
const is_null_input = inputs.get('is_null_input');
…был запущен до before
, то есть inputs
все еще null
.
Перемещение этого кода внутрь теста означает, что он будет выполняться после определения before
и inputs
.
Рекомендуется не блокировать цикл событий JavaScript с помощью readFileSync
, поэтому в приведенном выше примере используется done
в сочетании с readFile
.