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

Posted

技术标签:

【中文标题】量角器:如何确认 fs.watch 被调用【英文标题】:protractor: how to confirm fs.watch was called 【发布时间】: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 是如何等待我的文件夹更改的,什么时候结束?如果什么都没发生,为什么我的测试会结束?

任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

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

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

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

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

希望这会有所帮助。

【讨论】:

2.我可以在手表内设置期望,但如果目录没有改变,它就不会运行 1.文档说“持久”默认为 true 3.这里的代码示例会很有帮助,4.我不明白你的意思

以上是关于量角器:如何确认 fs.watch 被调用的主要内容,如果未能解决你的问题,请参考以下文章

来自 Protractor 测试的裸 HTTP 调用

如何关闭文件夹的 fs.watch 监听器

量角器 - 等待异步完成

量角器:我应该如何从 browser.executeAsync 中传播错误?

无法使用 ng-apimock 模拟 API 调用

fs.watch 爬坑