在Angular Factory中调用this.function()和function()之间的区别

时间:2016-12-21 12:24:18

标签: javascript angularjs testing mocha factory

我有这样的角度工厂:

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);同时工作。

1 个答案:

答案 0 :(得分:0)

JS OOP最佳实践表明,当factory.func1被称为非词汇func1的回调时,this更可取。否则可能会使用this.func1

在单元测试的上下文中this.func1是最佳选择,因为它不是硬编码到特定功能或对象。

在测试Angular工厂服务的上下文this.func1factory.func1大致相同。