【问题标题】:Unit Testing Ajax calls单元测试 Ajax 调用
【发布时间】:2018-08-06 22:03:59
【问题描述】:

我需要一些关于单元测试的建议。我正在使用 mocha 和 sinon。

我有一个处理所有 ajax 请求的 httpService 模块(由我编写)。正在测试的文件需要 httpService 模块。

我正在对一个函数进行单元测试,该函数调用同一文件中的私有函数,该函数又调用 httpService.get()

对此进行单元测试的最佳方法是什么?

我想出的选项:

1) 我可以使用 sinon FakeXMLHttpRequest 来伪造 Ajax 响应。但是,因为 ajax 请求是从 httpService 模块发出的,所以我现在正在测试 httpService 模块的功能。这不是集成测试吗?

2) 我可以将 httpService 模块添加到我的单元测试文件中并存根 httpService.get() 函数。即使只是存根函数,在我的单元测试中是否需要一个模块是可接受的做法?

正在测试的文件不会暴露任何其他内容。

还有其他选择吗?

提前致谢!

【问题讨论】:

    标签: javascript unit-testing mocha.js sinon


    【解决方案1】:

    您是正确的,因为您的选项 1 太过分了。您的单元测试应仅限于测试您当前的功能。

    选项 2 即将实现...我需要 httpService 模块,然后创建一个 sinon spy 来监视 httpService.get 函数。

    sinon.spy(object, "method")

    这样您就可以简单地检查您的方法是否导致了对 http 服务的调用。

    您应该在此处阅读有关间谍的文档...

    Sinon spies

    【讨论】:

    • 感谢您的回复,非常感谢!只是另一个快速的。如果 httpService.get 返回一些在被测文件中使用的数据,在这种情况下它正在设置一个视图模型对象,我是否应该在调用被测函数后测试视图模型对象是否已更新。在这种情况下,我想我需要使用存根?如果我使用 BDD,我是否需要测试 httpService.get() 函数是否已被调用(使用间谍),或者我只是对视图模型对象已更新这一事实感兴趣。抱歉所有问题!
    • 是的 sinon.stubs 看起来像是在这种情况下要走的路。您基本上可以使用 .returns 前缀告诉存根返回什么。
    猜你喜欢
    • 2012-03-06
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-25
    相关资源
    最近更新 更多