3

Jasmine では、spyOn(object, 'function') を実行できます。「provider()」として使用されるプロバイダーをスパイしようとしています。それをスパイする方法は?

プロバイダーは次のようになります。

providers.provider('telecom', function() {
    this.$get = function() {
        return function() {
            return 'something';
        }
    }
}

コントローラーでは、次のように使用されます。

controllers.controller('ctrl', function(telecom) {
    var isp = telecom();
});

object.method() の場合、spyOn(object, 'method') を実行できます。provider() はどうですか?

私はグーグルで検索しましたが、役立つものは何も見つかりません。spyOn(provider)を試してみたのですが、「undefined()メソッドが存在しません」というエラーが出ました。

プロバイダーをモックしようとさえしましたが、成功しませんでした。( http://www.sitepoint.com/mocking-dependencies-angularjs-tests/ )

4

1 に答える 1

5

createSpyを使用できます:

describe('Describe', function() {

  var $scope, createController;

  var telecomSpy = jasmine.createSpy('telecomSpy');

  beforeEach(module('myApp'));

  beforeEach(inject(function($rootScope, $controller) {

    $scope = $rootScope.$new();

    createController = function() {
      $controller('MyController', {
        $scope: $scope,
        telecom: telecomSpy
      });
    };
  }));

  it('It', function() {

    expect(telecomSpy).not.toHaveBeenCalled();

    createController();

    expect(telecomSpy).toHaveBeenCalled();
  });
});

デモ: http://plnkr.co/edit/bdGZtOKV9mewQt9hteDo?p=preview

于 2015-01-07T10:18:21.583 に答える