量angular器:如何确认fs.watch被调用

我正在做e2etesting,我正在检查一个文件夹是否正在用这个代码修改:

var watchEvent = false; fs.watch('/tmp/directory', function(event, folderName) { watchEvent = true; console.log("it entered watch"); if (event === "rename" && folderName === currentDirectory) { console.log("my directory changed"); }; }); expect(watchEvent).toBe(true, "My directory didn't change"); 

现在我testing了它,它实际上工作,当目录更改时,它进入监视器监听器,打印"it entered watch""my directory changed"但由于此调用是asynchronouswatchEvent不会改变的时间和expect返回false

现在,当它不工作(所以目录不会改变)它不打印"it entered watch" ,也expect返回false

我正在考虑2个select:

  • 当手表完全没有改变时,我可以捕捉到一个方法(工作情况如何,它有多less时间在等待?)
  • 有一种方法可以在variables发生变化时触发事件(一个承诺?),例如我可以:

     var watchEvent; // 1. watch event is called, and assigns true. // 2. wait for a promise to confirm that `watchEvent` has a value and // run the `expect inside` 

PS我也不完全了解fs.watch如何等待我的文件夹改变,什么时候结束? 为什么我的testing完成,如果没有发生?

任何帮助将非常感激。

  1. fs.watch()接受一个参数(persistent:true | false),它可以控制手表是否应该继续观察实体。

  2. 如果要求断言watch事件是否确实改变了你的文件,那么你实际上可以把assertion代码放在​​watchcallback中。

  3. 如果要求断言一个监视事件是否确实发生,那么必须有时间限制 – 例如,可以使用setTimeout来设置一个你select的定时器,并在定时器函数中声明。

  4. 如果需要检查一个文件是否被改变(评估watch函数的正确性),那么你必须手动进行断言,不能依赖watch函数本身。

希望这可以帮助。