3

Angular 単体テストに Karma、Mocha、Sinon、Chai を使用しています。コントローラーで行っているリダイレクトを .xml でモックする方法を見つけようとしてい$locationます。

私のコントローラーは次のリダイレクトを行います:

$location.path('home');

スパイを使用してそのリダイレクトをモックしたいと思います。これが現在行っていることです。

describe('Auth Controller', function() {
  var controller;
  var $location;

  beforeEach(function() {
    bard.appModule('app.auth');
    bard.inject('$controller', '$rootScope', '$location');
  });

  beforeEach(function() {
    $location = {
      path: sinon.spy().returned('Fake location')
    };
    controller = $controller('authCtrl', { $scope: $rootScope, $location: $location });
  });

  it('should take you to the metrics page on successful login', function() {
    expect($location.path).to.have.been.calledWith("Fake location");
  });

});

次のエラーが表示されます。

TypeError: false はスパイでもスパイへの呼び出しでもありません!

これを正しく嘲笑する方法、またはこれを正しい方法で行っているかどうかはわかりません。

単体テストの専門家の助けをいただければ幸いです。前もって感謝します!

4

1 に答える 1

3

次のように location.path をテストするために Spies を使用できます (こちらの fe を参照してください: Spy on a service method call using jasmine Spies ):

var location, objectUnderTest;

beforeEach(inject(function($location){
  location = $location;
}));
function YourCtrlMaker() {
    objectUnderTest = $controller('YourCtrl', {
        $scope: $scope,
        $location: location,
        $routeParams: $routeParams,
    })
}
it('should test location.path', function(){
  spyOn(location, 'path');
  YourCtrlMaker();
  $scope.$root.$digest();
  expect(location.path).toHaveBeenCalledWith('example.com/objects/');
});
于 2016-03-17T13:54:24.773 に答える