【问题标题】:Testing URL query string in nodejs在nodejs中测试URL查询字符串
【发布时间】:2017-12-20 20:24:10
【问题描述】:

大家好,我做了一个可以管理和控制 URL 查询字符串的包。 我发布它抛出 npm。并为包的核心编写了一些测试

"parser.js" - 将查询字符串解析为对象

"strigifyer.js" - 将对象变成 URL 查询字符串

我现在用“mocha”和“expect”测试这些文件

有一个管理上述文件的主文件,该文件也被推送到查询字符串到 URL 而无需刷新。它使用 window.history 对象。

我应该怎么做才能成功测试主文件(index.js)?

我需要 window 和 history 对象来检查我使用我的 api 后是否有变化。

如果有帮助,这里是包: https://github.com/nevos12/query-string-manager

谢谢。

【问题讨论】:

    标签: javascript node.js testing npm


    【解决方案1】:

    如果我理解正确的话,暴露你的库的模块是src/index.js

    从你的 index.js 的代码风格来看,我建议使用sinon 来测试你的代码流。

    单元测试可以是:

    import sinon from 'sinon'
    import qs from 'src/index.js'
    
    it('should reset queryStringObject', () => {
      const pushToUrlSpy = sinon.spy(qs, 'pushToUrl');
      qs.reset(true);
      expect(qs.queryStringObject).to.equal({});
      expect(pushToUrlSpy.called);
      pushToUrlSpy.restore();
    })
    

    此代码在 pushToUrl() 上创建一个间谍,调用 reset() 并断言 queryStringObject 现在是一个空对象,并且至少调用了一次 pushToUrl()。最后它会恢复 spy,否则其他测试可能会很奇怪。

    【讨论】:

    • 很好,我想我明白了,你是说用这个库我可以测试我所有的“index.js”文件,但我实际上不能测试 pushToUrl() 方法?我可以断言它被调用了吗? (如果是,那很好,也许还有另一种测试 pushToUrl() 的方法)
    • @Nevo 您可以测试 pushTourl() 但您需要一次测试一件事并 spy/stub/mock 其他部分。您可以创建另一个测试来测试 pushToUrl() 并模拟它的依赖项。
    • 首先-感谢您的回答,这对我来说已经足够了。为了清楚起见,您的意思是要模拟“窗口”对象吗?类似的东西?
    • @Nevo 不,我的意思是模拟您愿意测试的对象的方法。您可以查看 sinon 文档并更好地理解它们。
    • 谢谢,我会努力了解更多
    猜你喜欢
    • 1970-01-01
    • 2011-06-16
    • 1970-01-01
    • 1970-01-01
    • 2013-08-18
    • 2012-01-23
    • 2014-05-30
    • 2012-03-27
    • 2011-08-30
    相关资源
    最近更新 更多