我有这样的角度工厂:
func2()
func1
会根据调用func1()
的结果执行某些操作,但func2()
不是私有函数,因为让我公开它会对我感兴趣。
一切都很好,直到我开始编码这个工厂的单元测试。在测试func1()
时,我希望将true
存根只是为了随时返回false
/ describe('Test func2 if func1 returns false', function () {
beforeEach(function () {
// func1 stub setup
sinon.stub(myFactory, 'func1');
myFactory.func1.returns(false);
// HERE myFactory.func1() RETURNS 'false'
});
it('should do something else', function (done) {
// HERE func1() CALLED INSIDE myFactory.func2() IS NOT THE STUB
myFactory.func2();
// Do some assertions, etc.
});
});
。
到目前为止,我编写了一个测试代码:
func2()
但是我注意到,如果我通过调用this.func1()
代替func1()
来对myFactory的function func2() {
if (this.func1()) {
// do something
} else {
// do something else
}
};
代码做了一些小改动:
func1()
从那时起,在测试中始终会调用存根this.
函数。
此时我只是感到困惑。有谁知道这里会发生什么?如果它属于同一个工厂,那么在this.func1()
的角度工厂内调用任何其他公共方法/函数会更“正确”吗?
更新
factory.func1()
或var footballers = [
{"name": "Qasim", "rating": "10"},
{"name": "Mahsam", "rating": 10},
{"name": "Aj", "rating": 3},
{"name": "Osman", "rating": 7},
{"name": "Usama", "rating": 7},
{"name": "Bilal", "rating": 3}
];
footballers.sort(function(a, b){
return a.rating - b.rating
});
console.log(footballers); //sorted
var team1 = [], team2 = [];
//Assuming, footballers have the same rating twice
for (let index=0;index<footballers.length;index += 2) {
team1.push(footballers[index]);
team2.push(footballers[index+1]);
}
console.log(team1, team2);
同时工作。
答案 0 :(得分:0)
JS OOP最佳实践表明,当factory.func1
被称为非词汇func1
的回调时,this
更可取。否则可能会使用this.func1
。
在单元测试的上下文中this.func1
是最佳选择,因为它不是硬编码到特定功能或对象。
在测试Angular工厂服务的上下文this.func1
和factory.func1
大致相同。