为什么Node fs.watchFile会阻止测试完成?

时间:2017-08-15 23:34:25

标签: javascript node.js jestjs

我最近将config-js集成到Jest测试中以获取可配置的网站网址和凭据,但现在我的测试还没有完全完成。通常,我从命令行运行npm test,执行测试,并返回命令行提示符。在测试中使用config-js,测试部分完成,但命令行只是挂起,我必须按ctrl + c才能返回提示符。 我做了一些实验,我很确定这是因为config-js使用了fs.watchFile:

fs.watchFile(this.pathToConfigFile, function () {
    self.loadConfig(self.pathToDefaults, self.pathToConfigFile, self.region);
});

当我评论这些行时,一切正常。 我尝试过使用fs.watch,但这并没有解决它。 就这样说,我实际上并没有在我的测试中对配置文件进行任何更改或热重新加载。

如果它有用,请参加以下测试:

const Config = require('config-js');
let myConfig = new Config('./my.config.js');
describe('config test', function () {
  it('gets the baseUrl', function() {
    expect(myConfig.get('testing.baseUrl')).toEqual('http://foo.com');
  });
});

以下是配置文件的样子:

module.exports = {
  testing: {
    baseUrl: "http://foo.com"
  }
}

1 个答案:

答案 0 :(得分:3)

fs.watchFile documentation

中对此进行了解释
  

persistent <boolean>表示只要正在监视文件,进程是否应继续运行。默认值: true

将persistent选项设置为false,以允许您的进程在所有其他操作完成后退出:

fs.watchFile(this.pathToConfigFile, {persistent: false}, function () {
    self.loadConfig(self.pathToDefaults, self.pathToConfigFile, self.region);
})