虽然在同步操作上明显停止,但mocha测试通过

时间:2016-11-03 17:16:29

标签: node.js mocha

好的,这有点让我感到沮丧。我正在尝试对我正在编写的应用程序运行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);
  });
});

1 个答案:

答案 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所暗示的那样。