我在服务中有以下代码。
function getK(k) {
return function() {
return k;
};
}
我可以测试使用
调用getKbeforeEach(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;
}
使用Jasmine
修改
要尝试进一步指定,getK function
用于填写对象,如下所示。该对象是我正在使用的key
库的一部分。我想我有点困惑如何从业力茉莉的角度测试这个,看到key
的实际实现是我无法控制的库的一部分。所以我不确定如何为内部getK函数编写测试,甚至不知道如何为下面的valid
函数编写测试以确保对象已正确填写
libObject.push({
Data: {
Name: 'test'
},
key: getK("TEST"),
valid: function() {
return true;
}
});
答案 0 :(得分: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);
在这个规范中不需要间谍,因为没有什么可以窥探的。
答案 1 :(得分:2)
由于调用父函数返回一个函数,调用父函数,并立即调用父函数返回的匿名函数:
expect(service.getK(k)()).toEqual(k);
这很简单,应该适合你。