【问题标题】:Angular unit Testing spyOn().and.callthrough doesn't call actual funciton角单元测试 spyOn().and.callthrough 不调用实际功能
【发布时间】:2017-10-15 23:38:05
【问题描述】:

我是在 Angular 中使用 Jasmine 进行单元测试的新手。

我目前正在测试一个服务,它有一个名为 loadSomething(id) 的函数,并且我在其中添加了一个 console.info。

我的服务:

function loadSomething(id)
{
    console.info('this is a test message');
    return (a promise from a POST request)
}

这是我的测试(规范)文件:

//verify that the load function exists
it('load snapshot',function(){

  expect(MyService.loadSomething(108)); //statement 1
  spyOn(MyService, 'loadSomething').and.callThrough(); //statement 2
});

所以,我在网上看到 SpyOn 的 callthrough 方法调用了 ACTUAL 函数。 但是,当我使用期望语句(语句 1)运行我的测试时,会调用 console.info 消息(工作正常)。另一方面,当我注释掉语句 1 并取消注释 SpyOn(语句 2) 时,我不再收到 console.info 消息。

我预计会发生完全相反的情况。 我是不是理解错了?

(代码的其余部分工作正常,无论是规范文件还是实际服务,我只是不太了解这个具体的东西)

【问题讨论】:

    标签: angularjs unit-testing jasmine karma-jasmine spyon


    【解决方案1】:

    SpyOn 将帮助您设置函数在测试中被调用时的反应方式。基本上它是创建模拟的茉莉花方式。

    在您的情况下,您已经定义了在调用服务函数时测试应该执行的操作,即 callThrough。 问题是您还需要对服务功能(或调用您的服务方法的范围功能)采取行动,以便 触发将调用的 SpyOn

    it('load snapshot',function(){
    
      //setup
      spyOn(MyService, 'loadSomething').and.callThrough(); //statement 2
    
      //act
    
      //either call the scope function which uses the service 
      //$scope.yourServiceCallFunction();
    
      //or call the service function directly
      MyService.loadSomething(1); //this will callThrough
    
    });
    

    这是一个简单的测试,我们将模拟 SpyOn 对字符串的响应

    it('test loadSomething',function(){
    
      //setup
      spyOn(MyService, 'loadSomething').and.returnValue('Mocked');
    
      //act
      var val = MyService.loadSomething(1);
    
      //check
      expect(val).toEqual('Mocked');
    });
    

    【讨论】:

    • 你说“这将通过”。但是调用通过是什么意思?我希望它是这样的:function a(){ b(); } 函数 b() { c(); } function c() { console.log('一直调用到这个'); }。所以当我说 spyOn(MyService, 'a').and.callThrough();然后是 MyService.a(),我希望看到控制台日志,因为我告诉它调用整个链。但我有一种感觉,这不是他们想要的措辞......
    猜你喜欢
    • 2019-07-11
    • 2019-11-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-08
    • 1970-01-01
    • 2020-09-09
    • 1970-01-01
    • 2017-05-29
    相关资源
    最近更新 更多