У меня есть Угловой завод так:Разница между вызовом this.function() и функциями() в угловом Factory
angular
.module('app.myModule')
.factory('myFactory', myFactory);
myFactory.$inject = [];
function myFactory() {
var factory = {
func1: func1,
func2: func2
};
return factory;
//////////
function func1() {
if (/* some condition */) {
return true;
} else {
return false;
}
};
function func2() {
if (func1()) {
// do something
} else {
// do something else
}
};
};
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()
кода myFactory, вызывая this.func1()
вместо func1()
так:
function func2() {
if (this.func1()) {
// do something
} else {
// do something else
}
};
от point on, в тестах всегда вызывается функция func1()
.
На данный момент я просто смущен. Кто-нибудь знает, что может происходить здесь? Было бы более «правильным» назвать любой другой публичный метод/функцию внутри моих угловых фабрик с this.
, если он принадлежит к той же фабрике?
UPDATE
this.func1()
или factory.func1()
работа обоих.
Это более общий вопрос AngularJS. Посмотрите видеоролики этой пары: https://www.youtube.com/playlist?list=PLoYCgNOIyGABI011EYc-avPOsk1YsMUe_ – tomepejo