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的测试”。是你打电话给盖茨基的。当然,它会被称为“测试”。编辑问题,试图帮助解释情况。