好的,这有点让我感到沮丧。我正在尝试对我正在编写的应用程序运行mocha测试,该应用程序应根据项目参数(dockerfile)选择并复制文件。该测试适用于其他情况,事实上它对于这种情况是绿色的,除了它不应该。
测试使用fs.readFileSync
来存储应该存在的文件内容以及实际存在的文件内容,以确定是否复制了正确的文件。
问题是,该位置尚未检查文件(因为我没有编写代码将其放在那里,我已通过打印出测试正在使用的目录然后自己在那里导航来验证),但是测试通过。更奇怪的是,据我所知,在readFileSync操作之后没有代码执行。但它也没有超时...
以下是有问题的测试代码:
it('should create a Dockerfile from ./data/dockerfiles/war.docker', () => {
let projectDocker = path.join(project, 'Dockerfile');
let warDocker = path.join(__dirname, '..', 'data','dockerfiles','war.docker');
select(project, (err, result) => {
let correct = fs.readFileSync(warDocker, 'utf-8');
console.log('projectDocker');
console.log('checking for projectDocker');
let prj = fs.readFileSync(projectDocker, 'utf-8');
console.log('Read file sync for project has completed'); // This line never fires
expect(prj).to.equal(correct);
expect(err).to.not.exist;
expect(result).to.exist;
expect(result).to.have.property('relPath', project);
expect(result).to.have.property('prepared', true);
});
});
答案 0 :(得分:1)
select()
看起来很可疑异步,在这种情况下,您的测试也应该是异步的:
it('should create a Dockerfile from ./data/dockerfiles/war.docker', done => {
...
select(project, (err, result) => {
if (err) return done(err);
...
done();
});
});
否则你会冒很大的异常被吞下的风险,正如@Martin所暗示的那样。