2016-05-02 8 views
0

私は、約束を返すサービスでメソッドをモックしようとしています。コントローラ:コントローラが擬似サービスの据え置きを呼び出さない

app.controller('MainCtrl', function($scope, foo) { 
var self = this; 
this.bar = ""; 

this.foobar = function() { 
    console.log('Calling the service.'); 
    foo.fn().then(function(data) { 
    console.log('Received data.'); 
    self.bar = data; 
    }); 
} 

this.foobar(); 
}); 

specファイルは:

angular.module('mock.foo', []).service('foo', function($q) { 
var self = this; 

this.fn = function() { 
    console.log('Fake service.') 
    var defer = $q.defer(); 
    defer.resolve('Foo'); 
    return defer.promise; 
}; 
}); 

describe('controller: MainCtrl', function() { 
var ctrl, foo, $scope; 

beforeEach(module('app')); 
// inject the mock service 
beforeEach(module('mock.foo')); 

beforeEach(inject(function($rootScope, $controller, _foo_) { 
    foo = _foo_; 
    $scope = $rootScope.$new(); 

    ctrl = $controller('MainCtrl', {$scope: $scope , foo: foo }); 
})); 

it('Should call foo fn', function() { 
expect($scope.bar).toBe('Foo'); 
}); 

}); 

デバッグ、私は約束のオブジェクトの状態が1(解決)されるコントローラで見ることができます。しかし、then内の成功コールバックは決して呼び出されません。

次のPlunker http://plnkr.co/edit/xpiPKPdjhiaI8KEU1T5Vはシナリオを再現します。どんな助けでも大歓迎です。

答えて

1

あなたのテストに$ rootScopeへの参照を取得して呼び出す必要があります:

再訪
$rootScope.$digest() 

あなたplunk、:

$digest called and test passed.

また、あなたのモックが解決には何も返しませんでした、私は付け加えた:

defer.resolve( 'Foo');

HTH

関連する問題