量角器:如何确认fs.watch被称为

时间:2016-12-14 03:13:10

标签: javascript angularjs node.js asynchronous protractor

我正在进行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如何等待我的文件夹更改,它什么时候结束?如果什么都没发生,为什么我的测试结束?

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:-1)

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

  2. 如果要求断言监视事件是否确实改变了您的文件,那么您实际上可以将断言代码置于监视回调中。

  3. 如果要求断言监视事件是否确实发生,则必须是时间绑定 - 例如,您可以使用setTimeout设置您选择的计时器,并在计时器功能内部断言

  4. 如果要求检查文件是否被更改(评估监视功能的正确性),则必须手动执行断言,不能依赖于监视功能本身。

  5. 希望这有帮助。