Jasmine如何测试返回匿名函数的函数

0 unit-testing jasmine angularjs karma-jasmine

我在服务中有以下代码。

function getK(k) {
        return function() {
            return k;
        };
    }
Run Code Online (Sandbox Code Playgroud)

我可以测试调用了getK

beforeEach(inject(function(FiltersService){
    this.service = FiltersService;
    spyOn(this.service, 'getK');
}));

it("getK should be called", function(){
    var key = "TEST";
    var result = this.service.getK(key);
    expect(this.service.getK).toHaveBeenCalled();
    expect(this.service.getK).toHaveBeenCalledWith("TEST");
}
Run Code Online (Sandbox Code Playgroud)

我的问题是如何测试内部

return function() {
    return k;
}
Run Code Online (Sandbox Code Playgroud)

与茉莉花

编辑

要尝试进一步指定,请getK function使用来填充对象,如下所示。该对象是我正在使用的库的一部分key。我想我对如何从业力茉莉花的角度进行测试感到困惑,key因为我的实际实现是我无法控制的库的一部分。因此,我不确定如何为内部getK函数甚至以下valid函数编写测试,以确保正确填写对象

libObject.push({
   Data: {
   Name: 'test'  
            },
   key: getK("TEST"),
     valid: function() {
     return true;
}
});
Run Code Online (Sandbox Code Playgroud)

Est*_*ask 5

单元测试假设逐行测试代码以覆盖全部内容。

考虑到getK作为FiltersService方法公开,它是

expect(this.service.getK).toEqual(jasmine.any(Function));

var key = {};
var result = this.service.getK(key);

expect(result).toEqual(jasmine.any(Function));
expect(result()).toBe(key);
Run Code Online (Sandbox Code Playgroud)

在此规格中不需要间谍,因为没有什么可间谍的。