2017-05-31 13 views
1

私は基本的にやっている機能をテストしようとしている、角度ジャスミンテストモーダルとモーダルの

  • オープン確認モーダル
  • リターン結果(OKであるか、[キャンセル]ボタン値)
  • を結果解決条件チェックは
  • 私のコントローラ機能がある

別の関数を呼び出すをもたらす場合。

openPopup() { 
    confirmationModal.open().then((result) => { 
    if(result === 'OK') { 
     someService.doSomething() 
      .then(() => {   
      showSuccess(); 
      }); 
     } 
     }).finally(() => { 
     confirmationModal.close(); 
     }); 
} 

私のテストは次のとおりです。

describe('confirmation modal',() => { 
beforeEach(() => { 

    inject(($controller, _$q_) => { 
     var q = _$q_; 

     someService = { 
     doSomething: jasmine.createSpy() 
     }; 

     var modalResult = { 
     then: function(callback) { 
      callback("OK"); 
     } 
     }; 

     confirmationModal = { 
     open: jasmine.createSpy().and.returnValue(q.when({ result: modalResult })), 
     close: jasmine.createSpy() 
     }; 

     Ctrl = $controller('MainController', { 
     $scope: scope, confirmationModal: confirmationModal, someService: someService 
     }); 
    }); 
    }); 

    it('should pass OK value',() => { 
    Ctrl.openPopup(); 

    scope.$digest(); 

    expect(someService.doSomething).toHaveBeenCalled(); 
    }); 
}); 

私はカルマを介してこれを実行する - PhantomJS、私が呼び出されたために、未知の期待スパイを取得しています。これはモーダル結果のIf条件を通過できないと仮定しています。基本的に条件付きモーダル結果をテストする必要がある場合はできます。 confirmationModalのオープンまたはクローズ機能をテストして期待すると、テストは合格しますが、confirmationModalが呼び出された後に関数が必要な場合、テストは失敗します。

私はこの多分基本的なことに苦しんでいると私はいくつかのルールや私の悪い英語を欠場した場合、私はすでに、本当にごめんなさい。

ありがとうございました!スタブサービスのために

答えて

1

は、注入されるべきアプリケーションによって使用される、現在それが注入されません。コントローラでは、$controllerローカル依存性を注入することができる。

Ctrl = $controller('MainController', { 
    $scope: scope, confirmationModal, someService 
    }); 

resultは、文字列ではなく、オブジェクト、特にないmodalResultないような約束をシミュレート対象となっています。それは

confirmationModal = { 
    open: jasmine.createSpy().and.returnValue(q.when('OK')), 
    close: jasmine.createSpy() 
    }; 
+0

私は実際に私がコピー/貼り付けをしようとしていたときに実際に私はそれをカットしたので、コントローラの実際のサービスとの依存関係があります。実際に助けてくれてありがとう、私は間違った文字列、実際の状態をいくつかの文字列をチェックして送信していました。 – burakakkor

+1

状態はかなり簡単です。それは文字列を期待するので、 '.and.returnValue(q.when( 'OK'))'で期待どおりに動作するはずです。 – estus

関連する問題