2017-04-04 10 views
0

$uibmodalを開く関数をテストしようとしています。これは私の工場の機能です。

ユニットテストファイルでは、まずそのようなプロバイダを追加しています。

beforeEach(angular.mock.module('ui.bootstrap')); 

beforeEach(function() { 
    module(function ($provide) { 
     $provide.value('$uibModal', function (value) { 
     return value; 
     }); 
    }); 
    }); 

その後、私はそうのようなbeforeEachopendismissclose機能を注入しています。

beforeEach(inject(function (_utilsFactory_, _$httpBackend_, _$filter_) { 
    utilsService = _utilsFactory_; 
    $httpBackend = _$httpBackend_; 
    filter = _$filter_; 
    uibModal = { 
    open: function() {}, 
    dismiss: function() {}, 
    close: function() {} 
    }; 

})); 

最後に、私はファクトリ関数を呼び出してユニットテストを実行しようとしています。

it('should show a confirmation message', function() { 
    var spy = spyOn(uibModal, "open").and.callFake(function() { 
    return { 
     result: { 
     then: function() {} 
     } 
    }; 
    }); 
    utilsService.confirmationMessage("Are you Sure?"); 
    expect(spy).toHaveBeenCalled(); 

}); 

それは、$uibModal.openが機能ではないことを私にエラーを与えます。

答えて

1

あなたbeforeEachは次のようにする必要があります:ここで、我々は$uibModalとして提供しているオブジェクトがopen機能を持っている、ということ

beforeEach(module('myApp', function ($provide) { 

    mockModal = { 
     result: { 
      then: function(confirmCallback, cancelCallback) { 
       this.confirmCallback = confirmCallback; 
       this.cancelCallback = cancelCallback; 
       return this; 
      } 
     }, 
     opened: { 
      then: function (confirmCallback, cancelCallback) { 
       this.confirmCallback = confirmCallback; 
       this.cancelCallback = cancelCallback; 
       return this; 
      } 
     }, 
     close: function() { 
      this.opened.confirmCallback(); // covers opened.then success 
      this.result.confirmCallback(); // covers result.then success 
      this.result.cancelCallback(); // covers result.then error 
     }, 
     open: function (object1) { 
      return this; 
     } 
    }; 
    $provide.value('$uibModal', mockModal); 
})); 

注意。あなたは(スパイの後ではないcallFakecallThroughに必要があるだろう、これは$provideで通過した

あなたがここでそれらを使用していない場合はresult/opened/closeを削除すること自由に感じなさい。対応するコードがある場合に便利です。

+0

今、モーダルが開かれているかどうかをテストする方法は? "それ"の機能で。 –

+0

@UmairJameelはこれで答えを更新しました。 – tanmay

関連する問題