对同一数据的多个单元测试可在回调中访问
Multiple unit tests on the same data accessible in a callback
我实现了一个解析器来从 Excel 文件和 return 具有特定结构的对象中提取数据。为了使代码异步工作,我使用了一个简单的 callback 方案来进一步处理提取的数据:
parse(inputFile, callback) {
const workbook = new Excel.Workbook();
workbook.xlsx.readFile(inputFile).then((workbook) => {
// Parsing
callback(result);
});
}
现在我想使用 Mocha
和 Chai
为这个例程编写一个 单元测试 。当然我可以简单的把expect()
语句放在回调函数中:
const ExcelParser = require('ExcelParser');
var chai = require("chai");
const expect = chai.expect;
describe('Unit::Test parsing', () => {
const excelParser = new ExcelParser();
it('should parse the data correctly', (done) => {
excelParser.parse('sheet.xlsx', (data) => {
expect(data).to.have.property('mainContent');
expect(data['mainContent']).to.be.an('array');
});
done();
});
});
这很好用,但我想在单独的 it()
块中为 returned 数据对象编写更多测试。通过这种方式,解析将对每个子测试重复。
我尝试将 parse()
的调用放在 before()
块中,并定义一个将结果对象存储在全局变量中的回调方法,但显然解析尚未完成测试是 运行.
如果可能的话,最好的方法是什么?如果 parse()
方法 returned a Promise
而不是使用回调会有帮助吗?
您应该能够通过在传递 done
的 before
块中进行解析来实现此目的。然后正常测试 it
语句,
const ExcelParser = require('ExcelParser');
var chai = require("chai");
const expect = chai.expect;
describe('Unit::Test parsing', () => {
const excelParser = new ExcelParser();
let data = null;
before((done) => {
excelParser.parse('sheet.xlsx', (result) => {
data = result;
done();
});
})
it('should parse the data correctly', () => {
expect(data).to.have.property('mainContent');
expect(data['mainContent']).to.be.an('array');
});
it('should have prop foo', () => {
expect(data).to.have.property('foo');
});
...
});
假设 excelParser.parse
返回了一个承诺,你不需要将 done
传递给 before
:
before(() => {
return excelParser.parse('sheet.xlsx')
.then((result) => {
data = result;
});
})
我实现了一个解析器来从 Excel 文件和 return 具有特定结构的对象中提取数据。为了使代码异步工作,我使用了一个简单的 callback 方案来进一步处理提取的数据:
parse(inputFile, callback) {
const workbook = new Excel.Workbook();
workbook.xlsx.readFile(inputFile).then((workbook) => {
// Parsing
callback(result);
});
}
现在我想使用 Mocha
和 Chai
为这个例程编写一个 单元测试 。当然我可以简单的把expect()
语句放在回调函数中:
const ExcelParser = require('ExcelParser');
var chai = require("chai");
const expect = chai.expect;
describe('Unit::Test parsing', () => {
const excelParser = new ExcelParser();
it('should parse the data correctly', (done) => {
excelParser.parse('sheet.xlsx', (data) => {
expect(data).to.have.property('mainContent');
expect(data['mainContent']).to.be.an('array');
});
done();
});
});
这很好用,但我想在单独的 it()
块中为 returned 数据对象编写更多测试。通过这种方式,解析将对每个子测试重复。
我尝试将 parse()
的调用放在 before()
块中,并定义一个将结果对象存储在全局变量中的回调方法,但显然解析尚未完成测试是 运行.
如果可能的话,最好的方法是什么?如果 parse()
方法 returned a Promise
而不是使用回调会有帮助吗?
您应该能够通过在传递 done
的 before
块中进行解析来实现此目的。然后正常测试 it
语句,
const ExcelParser = require('ExcelParser');
var chai = require("chai");
const expect = chai.expect;
describe('Unit::Test parsing', () => {
const excelParser = new ExcelParser();
let data = null;
before((done) => {
excelParser.parse('sheet.xlsx', (result) => {
data = result;
done();
});
})
it('should parse the data correctly', () => {
expect(data).to.have.property('mainContent');
expect(data['mainContent']).to.be.an('array');
});
it('should have prop foo', () => {
expect(data).to.have.property('foo');
});
...
});
假设 excelParser.parse
返回了一个承诺,你不需要将 done
传递给 before
:
before(() => {
return excelParser.parse('sheet.xlsx')
.then((result) => {
data = result;
});
})