【问题标题】:Jasmine - Method not being calledJasmine - 未调用方法
【发布时间】:2016-05-05 15:55:08
【问题描述】:
var obj = {};

obj.localContext = 'firstTemp';

  obj.call = function(){
    obj.localContext = 'secondTemp';
  };

茉莉花规格:

it('value of localContext', function(){
  spyOn(obj, 'call');
  obj.call();
  expect(obj.localContext).toEqual('secondTemp');
});

为什么永远不会调用 obj.call() 方法?当我运行规范时,obj.localContext 的值仍然是firstTemp 而不是secondTemp

【问题讨论】:

    标签: javascript unit-testing jasmine


    【解决方案1】:

    创建间谍时,默认行为是用不调用原始对象的模拟替换对象。通常,您会使用它来测试功能,否则这些功能会调用您不想调用的其他 API - 您可以测试它们会被调用,而 实际上不会调用 他们。

    Jasmine 确实为您提供了一种调用原始函数的方法:

    spyOn(obj, "call").and.callThrough();
    

    查看Jasmine documentation for spies(不幸的是,直接链接到and.callThrough 部分不起作用)

    【讨论】:

    • 我尝试使用and.callThrough(),但obj.call 的值仍被记录为firstTemp
    • obj.call 被调用,但我得到一个错误 - Some of your tests did a full page reload!
    • 我在上面的代码中看不到任何会导致页面加载的内容。您正在测试的代码是否不同?
    • 是的,我正在测试$window.location.obj 的值。 @SpoonMeiser
    • $windowwindow 的某种别名吗? window.location 是当前页面的 URL - 更改它会加载一个新页面。为什么要尝试将对象附加到它?
    猜你喜欢
    • 2014-03-23
    • 2015-08-19
    • 1970-01-01
    • 2014-01-25
    • 2017-07-11
    • 2017-08-15
    • 1970-01-01
    • 2016-09-09
    • 2020-03-18
    相关资源
    最近更新 更多