【问题标题】:Jasmine test a function was called with a "similar" object?Jasmine 测试一个函数被一个“相似”对象调用?
【发布时间】:2016-05-26 23:19:07
【问题描述】:

假设我有一个这样做的函数:

var createDeferredAction = function (args) {
    var deferral = $q.defer();

    var action = {
       args: args
       deferral: deferral;
    };

    $scope.$emit('load-module', action);

    return deferral.promise;
}

然后在我的测试中,我想要这样的东西:

myService.createDeferredAction({foo: 'bar'});

var expected = {
    args: {foo: 'bar'},
    deferral: jasmine.anySimilar($q.defer())
}

expect($scopeSpy.$emit).toHaveBeenCalledWith('load-module', expected);

也就是说,当 jasmine 检查 expected 对象时,我不希望它尝试查找延迟的确切实例,我只希望它检查是否传入了与签名匹配的对象。例如任何延迟实例。

我知道我可以模拟 $q.defer() 并返回一个我可以在预期中使用的已知值,但我宁愿不必模拟 $q.defer()

茉莉花可以做到这一点吗?

【问题讨论】:

    标签: angularjs jasmine


    【解决方案1】:

    我尚未对其进行测试,但我认为您可以通过从方法调用中获取参数,然后仅检查您感兴趣的属性的类型来实现这一点。所以对于 Jasmine 2,类似:

    expect($scopeSpy.$emit.calls.argsFor(1).deferral).toEqual(jasmine.any(Deferred));
    

    或使用 Jasmine 1.3

    expect($scopeSpy.$emit.calls[0].args[1].deferral).toEqual(jasmine.any(Deferred));
    

    【讨论】:

      猜你喜欢
      • 2017-05-13
      • 2016-05-27
      • 2016-11-16
      • 1970-01-01
      • 2018-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多