量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完成,如果没有发生?
任何帮助将非常感激。
-
fs.watch()接受一个参数(persistent:true | false),它可以控制手表是否应该继续观察实体。
-
如果要求断言watch事件是否确实改变了你的文件,那么你实际上可以把assertion代码放在watchcallback中。
-
如果要求断言一个监视事件是否确实发生,那么必须有时间限制 – 例如,可以使用setTimeout来设置一个你select的定时器,并在定时器函数中声明。
-
如果需要检查一个文件是否被改变(评估watch函数的正确性),那么你必须手动进行断言,不能依赖watch函数本身。
希望这可以帮助。