2017-05-31 67 views
1

我試圖測試功能,它基本上是做,角茉莉花測試模態和解決結果

  • 打開確認模式
  • 模式的
  • 返回結果(按鍵值的確定或取消)
  • 如果條件檢查導致
  • 調用另一個函數

我的控制器功能是;

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,我得到預計間諜未知的已被調用。這是我假設我不能通過如果條件與模態結果。基本上需要測試條件模態結果如果我可以。 當我測試並期望啓用或關閉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