如何在运行一组摩卡测试之前读取文件



我正在尝试读取一个文件,其中包含一组摩卡测试的所有输入。在尝试读取这些文件时,我只是得到输入(地图)为空。

Scrapper_cheerio.js是以异步/等待格式编写的,但是,不要相信这与未读取的文件有任何关系。

如果我之前理解正确,那么之前块中的内容应该在任何测试发生之前发生。目前这是我尝试过的:

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');
}); 
});
});

所以我可以读取该文件,但是在描述中无法访问它。

这是一个简化的工作测试,应该可以让您快速入门:

输入.txt

[[ 'is_null_input', true ]]

代码测试.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回调始终同步运行(不能使用doneasync函数或在describe回调中返回Promise)。

所以这行:

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

。在before之前运行,这意味着inputs仍然null

将该代码移动到测试意味着它将在before之后运行,并将定义inputs

最好的做法是不要用readFileSync阻塞 JavaScript 事件循环,所以上面的例子将donereadFile结合使用。

最新更新