【问题标题】:How to test addEventListener in Mocha/Chai/Sinon with vanillajs and nodejs?如何使用 vanillajs 和 nodejs 在 Mocha/Chai/Sinon 中测试 addEventListener?
【发布时间】:2019-07-11 08:26:01
【问题描述】:

我对 Mocha 测试用于检查输入的事件侦听器有疑问。 我的环境是使用纯 JavaScript、nodejs 和 mocha/chai/sinon 进行测试。 我写了一些其他正在工作的测试,基本上是检查功能,但测试命中“无法读取 null 的属性 'addEventListener'”。

由于我对测试很陌生,所以我在文档中进行了研究,添加了 JSDOM 等,但没有运气。我根本不知道如何检查事件监听器。许多已经可用的线程都是 React 环境,它们似乎有某种内置应用程序可以帮助它们,但不是我。

所以基本上就是这样,真的缩小了:

const userInput = document.querySelector("#userInfo");
userInput.addEventListener("input", changeContent);

它检查用户输入,在 changeContent 方法中它只检查长度等。 有谁知道我应该如何做到这一点?

编辑: 轻微的解决方法可以“跳过”我的问题,但无论如何学习如何在测试中解决它会很好。这样测试就通过了(因为它忽略了它)。

解决方法,因为测试点 eventListener 为 null:

if(userInput){
  userInput.addEventListener("input", changeContent)
}

【问题讨论】:

    标签: javascript node.js mocha.js sinon chai


    【解决方案1】:

    您可以使用spy 来测试addEventListener 是否被调用。没有具体原因来测试addEventListener的实现。

    您还必须伪造 document.querySelector 并强制它返回一个 HTMLElement。

    长话短说:

    addEventListener 使用间谍:https://sinonjs.org/releases/v7.3.2/spies/

    document.querySelector使用假货:https://sinonjs.org/releases/v7.3.2/

    间谍示例 console.log:

    // method implementend in your project
    function log() {
       console.log('Hello world');
    
    }
    
    // log.spec.ts
    
    ...
    describe('whatever test suite', () => {
        it('test log', () => {
            const consoleSpy = Sinon.spy(console, 'log');
            log();
    
            Sinon.assert.calledWith(consoleSpy, 'Hello world');
        });
    });
    ...
    

    【讨论】:

    • 哦,我从 4 小时的文档中学到了更多,谢谢!我仍然有一些问题围绕着如何检查是否正在调用 addEventListener。试图建立一个假货,但似乎我在那里也失败了,一切都指向使用带有功能的假货。在测试和实际文件中使用 log() 的“连接”按预期工作。
    • 会不会像 const fake = sinon.fake.lookup.testing 一样简单,其中“lookup”是项目模板...?
    • 你不必通过模板
    • 你必须让 getElementById 返回一个 HTMLElement 对象。您可以直接在javascript中创建它
    • 好的,不通过模板。知道了。所以我根本不需要参考模板,即使是假的?或者我会从模板创建假货,然后只在测试套件中引用假货?还需要将 querySelector 更改为 getElementById 才能正常工作?
    猜你喜欢
    • 2017-10-08
    • 1970-01-01
    • 2015-12-01
    • 2018-04-08
    • 1970-01-01
    • 2017-10-23
    • 1970-01-01
    • 2020-10-11
    • 1970-01-01
    相关资源
    最近更新 更多