コンストラクタを返すファクトリを作成しました。コンストラクターには、インスタンスのプロパティを監視するウォッチャーが含まれています。そのプロパティがテストで変更されると、ウォッチャーは起動されません。テストの外では、それは解雇されます。$rootScope.$apply は役に立たないようです。
これは、コードとテストの簡略化されたバージョンを含む jsfiddle です。
http://jsfiddle.net/2Ny8x/234/
//--- CODE --------------------------
(function (angular) {
var myApp = angular.module('myApp', []);
myApp.factory('MyObject', function($rootScope) {
function MyObject() {
this.prop = 5;
this.watcherCallback = angular.noop;
$rootScope.$watch(this.prop, this.watcherCallback);
}
return MyObject;
});
})(angular);
// ---SPECS-------------------------
describe('MyObject', function () {
beforeEach(module('myApp'));
var MyObject, rootScope;
beforeEach(inject(function (_MyObject_, $rootScope) {
MyObject = _MyObject_;
rootScope = $rootScope;
}));
it('calls the watcher when "prop" updates', function() {
var newObj = new MyObject();
spyOn(newObj, 'watcherCallback');
newObj.prop = 10;
rootScope.$apply();
expect(newObj.watcherCallback).toHaveBeenCalled();
});
});
ウォッチャーが起動しないのはなぜですか?