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

Angularjs Jasmine如何测试返回匿名函数的函数,angularjs,unit-testing,jasmine,karma-jasmine,Angularjs,Unit Testing,Jasmine,Karma Jasmine,我在服务中有以下代码 function getK(k) { return function() { return k; }; } 我可以测试getK是用什么调用的 beforeEach(inject(function(FiltersService){ this.service = FiltersService; spyOn(this.service, 'getK'); })); it("getK should b

我在服务中有以下代码

function getK(k) {
        return function() {
            return k;
        };
    }
我可以测试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");
}
我的问题是我如何测试内在的

return function() {
    return k;
}
茉莉花

编辑

为了尝试进一步指定,使用getK函数填充对象,如下所示。该对象是我正在使用的使用密钥的库的一部分。我想我对如何从karma jasmine的角度测试这一点有点困惑,因为键的实际实现是我无法控制的库的一部分。因此,我不知道如何为内部getK函数甚至下面的有效函数编写测试,以确保对象正确填写

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

单元测试假设逐行测试代码以获得完整覆盖

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

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);

在本规范中不需要间谍,因为不需要间谍。

因为调用父函数会返回函数,所以调用父函数,然后立即调用父函数返回的匿名函数:

expect(service.getK(k)()).toEqual(k);

这非常简单,应该对您非常有效。

您到底想测试什么?我真正可以测试的所有内容。它返回我发送给getK的内容…老实说,它是为了得到代码覆盖率upexpectresult.toEqualjasmine.anyFunction。您尚未提供有关此函数上下文的详细信息,因此无法再说其他内容。我不明白为什么需要“调用getK的测试”。是你打电话给盖茨基的。当然,它会被称为“测试”。编辑问题,试图帮助解释情况。