【问题标题】:protractor: how to confirm fs.watch was called量角器:如何确认 fs.watch 被调用
【发布时间】:2017-04-29 06:56:51
【问题描述】:

我正在做 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 不会及时更改并且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 是如何等待我的文件夹更改的,什么时候结束?如果什么都没发生,为什么我的测试会结束?

任何帮助将不胜感激。

【问题讨论】:

    标签: javascript angularjs node.js asynchronous protractor


    【解决方案1】:
    1. fs.watch() 接受一个参数(持久性:true|false),该参数可以控制手表是否应该永远持续观察实体。

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

    3. 如果要求断言监视事件是否确实发生,则必须有时间限制 - 例如,您可以使用 setTimeout 设置您选择的计时器,并在计时器函数中断言.

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

    希望这会有所帮助。

    【讨论】:

    • 2.我可以在手表内设置期望,但如果目录没有改变,它就不会运行
    • 1.文档说“持久”默认为 true
    • 3.这里的代码示例会很有帮助,4.我不明白你的意思
    猜你喜欢
    • 1970-01-01
    • 2017-02-18
    • 1970-01-01
    • 2015-10-01
    • 1970-01-01
    • 2021-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多