角度单元测试嵌套函数

时间:2014-01-27 10:06:20

标签: angularjs unit-testing jasmine

我的角度项目我有一个依赖于服务2的service1.Service1正在为callbackSuccess发送一个相当复杂的函数到service2

service2.js

 this.getData = function (url, callbackSuccess, callbackError) {

我不确定是否有很多单元测试服务2,我应该专注于service1,因为大多数逻辑都包含在那里。有人可以建议吗?

2 个答案:

答案 0 :(得分:2)

您可以在service2中的函数上创建一个间谍,或者完全模拟service2

var data_spy = spyOn(service2, 'getData').andCallFake(
    function(url, callbackSuccess, callbackError) {
        callbackSuccess(mock_data); // Mock the data somewhere
    }
);

使用它是一个好主意,因为它消除了对测试中service2功能的依赖。虽然您仍应考虑测试service2

其他一些建议。这种模式似乎非常适合承诺,因为有一个决心和拒绝回调。我建议你看一下$q documentation

希望这有帮助!

答案 1 :(得分:1)

您应该测试service2吗?

如果service2显然是正确的,因为它很简单就可以检查它 - 那么你可能不需要测试它。但是,如果它比那更复杂,那么你可能想测试它。

我可以看到它必须至少做三件事:

  1. 使用url
  2. 执行某事
  3. 仅在操作成功时调用成功回调,并根据操作输出使用所有正确参数调用它
  4. 仅在操作不成功时才调用错误回调,并根据输出调用所有正确的参数(例如错误代码和消息)
  5. 对我而言,这项工作量会让我添加一些测试 - 甚至没有关于例外的异常处理......测试它,因为它很简单,也应该很简单。

    测试service1

    如果service1包含复杂的回调,那么它肯定应该进行测试。确保可以从测试中访问回调,这样您就可以在将service1传递给service2之前与service2可能正在执行的其他操作完全隔离的情况下对其进行彻底测试。

    结论

    最终,您会提出一个意见问题,而且这个问题依赖于我们不了解的有关您的代码库,目标和截止日期的大量信息。我最好的答案是:测试{{1}}。