首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >无法使jasmine.any(函数)工作

无法使jasmine.any(函数)工作
EN

Stack Overflow用户
提问于 2012-05-16 09:25:04
回答 2查看 32.5K关注 0票数 22

我已经创建了一个完整的简化示例,它复制了我遇到的问题。

代码语言:javascript
复制
function TestObj() {
    var self = this;
    self.getStuff = function(aString, callback) {
        // TODO
    }
}

describe("server communications", function() {
    it("it calls the server", function() {
        var obj = new TestObj();
        obj.getStuff = jasmine.createSpy();
        // swap the above line for this and it makes no difference
        // spyOn(obj, "getStuff");

        var functionVar = function() {
        };

        obj.getStuff("hello", functionVar);

        expect(obj.getStuff).toHaveBeenCalledWith(
                [ "hello", jasmine.any(Function) ]);
    });
});

我得到的不是通过的单元测试,而是以下输出:

预期spy已被调用:[[ 'hello', ]],但被调用的是:[ 'hello',Function ]

为什么它没有意识到我传入的函数(function (){})实际上是函数?它所期望的本机代码是什么?还有谁在使用jasmine.any(函数)时遇到了这个问题?谢谢!

编辑的

我尝试使用spyOn而不是jasmine.createSpy(),结果没有什么不同。我只尝试了一个论点,它是有效的。引入第一个字符串参数会破坏jasmine.any(函数)--有什么想法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-05-17 08:50:35

啊,我还以为你必须把expect().toHaveBeenCalledWith的参数包含在Array[]中呢。我真傻。以下是一个工作版本:

代码语言:javascript
复制
function TestObj() {
    var self = this;
    self.getStuff = function(aString, callback) {
        // TODO
    }
}

describe("server communications", function() {
    it("it calls the server", function() {
        var obj = new TestObj();
        obj.getStuff = jasmine.createSpy();
        // swap the above line for this and it makes no difference
        // spyOn(obj, "getStuff");

        var functionVar = function() {
        };

        obj.getStuff("hello", functionVar);

        expect(obj.getStuff).toHaveBeenCalledWith("hello", jasmine.any(Function));
    });
});
票数 39
EN

Stack Overflow用户

发布于 2012-05-16 16:46:29

问题是你创建间谍的方式,使用spyOn似乎可以像预期的那样工作:

代码语言:javascript
复制
describe("test", function() {
  return it("is function", function() {
    var a = {b: function(){}};
    spyOn(a, 'b');
    a.b(function(){});
    expect(a.b).toHaveBeenCalledWith(jasmine.any(Function));
  });
});

您还可以使用write your own Matcher来测试传递的值是否为函数:

代码语言:javascript
复制
describe('test',function(){
  it('is function',function(){

    this.addMatchers({
      isFunction: function() {
        return typeof this.actual  === 'function';
      }
    });
    expect(function(){}).isFunction();
  });
});

编辑:对第一个代码块进行了编码

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10610874

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档