我正在尝试读取一个文件,其中包含一组Mocha测试的所有输入。在尝试读取这些文件时,我只是得到inputs(一个Map)为空。
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');
});
});
});
因此我可以读取文件,但是在描述中无法访问该文件。
答案 0 :(得分: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 run cycle首先运行所有describe
回调,而describe
回调始终同步运行(您不能使用done
,async
函数或在Promise
回调中返回describe
。
所以这行:
const is_null_input = inputs.get('is_null_input');
...正在before
之前运行,这意味着inputs
仍然是null
。
将代码移入测试的内部 意味着它将在定义before
和inputs
后运行。
最好的做法是不要用readFileSync
阻止JavaScript事件循环,因此上面的示例结合使用done
和readFile
。