我正在进行e2e测试,我正在检查是否正在使用此代码修改文件夹:
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");
现在我对它进行了测试,它确实有效,当目录发生变化时,它会进入监听监听器,打印"it entered watch"
和"my directory changed"
,但由于此调用是异步watchEvent
并不是#39; t时间变化,expect
返回false
。
现在当它不起作用(因此目录没有改变)时,它不会打印"it entered watch"
,expect
也会返回false
。
我正在考虑两种选择:
当变量发生变化(一个承诺?)时,有一种方法可以触发事件,例如我可以:
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`
P.S。我也不完全理解fs.watch
如何等待我的文件夹更改,它什么时候结束?如果什么都没发生,为什么我的测试结束?
非常感谢任何帮助。
答案 0 :(得分:-1)
fs.watch()接受一个参数(persistent:true | false),它可以控制手表是否应该继续观看该实体。
如果要求断言监视事件是否确实改变了您的文件,那么您实际上可以将断言代码置于监视回调中。
如果要求断言监视事件是否确实发生,则必须是时间绑定 - 例如,您可以使用setTimeout设置您选择的计时器,并在计时器功能内部断言
如果要求检查文件是否被更改(评估监视功能的正确性),则必须手动执行断言,不能依赖于监视功能本身。
希望这有帮助。