角度アプリケーションに次のコントローラがあります。
m = angular.module "myapp.dashboards"
m.directive "lkDashboardElement", (
$timeout
MyAppSettings
)->
scope:
dashboard: "="
element: "="
dashboardController: "="
elementLoaded: "&"
link: ($scope, $el)->
if MyAppSettings.shouldCalculateTableWidth
document.addEventListener "dashboard.element.rendered", =>
$timeout(->
..
..
)
重要な部分だけが表示されるように、たくさんのものを削除します。私が問題を抱えているのは、角の使用方法である$timeoutです。私は現在、特定の条件shouldCalculateTableWidth
をチェックしています。イベントが発生した場合は、すぐにタイムアウトします。
現在、$timeout
が使用されているかどうかをチェックする単体テストを作成しようとしています。
describe "in a phantomjs context", ->
beforeEach ->
# This sets our Phantom rendering context to true for testing purposes
MyAppSettings._setIsPhantomRendering(true)
afterEach ->
MyAppSettings._setIsPhantomRendering(false)
it "uses $timeout (instead of applyAsync) for adjusting table widths", ->
# Creates a dummy dashboard
dashboardController.queryMap = {1: {view: "foo", model: "bar"}}
dashboard.elements = [{id: 1}]
spyOn($timeout, "flush")
expect($timeout.flush).toHaveBeenCalled()
私はそれが重要であるため、単に$timeout
は、コードのこの部分で使用されているかどうかをテストされてやろうとしています私は午前たときにどのようにレンダリングされるか、特定の画像へ:ここ
Expected spy flush to have been called.
:すべての
spyOn($timeout, "flush")
expect($timeout.flush).toHaveBeenCalled()
まず、私は私を信じていません$timeout
の正しいメソッドを呼び出しています。私のコントローラでは、非常に明確で、$timeout
と呼ばれ、$timeout.flush
ではありません。第二に、Jasmine Spysの場合は、$timeout
は、クラスへの参照とメソッドの両方を必要とするため、spyOn
にすることはできません。
私はどのように移動するかについてはあまりよく分かりません。私はどんな助けもありがとう - ありがとう!
'flush'は' ngMock'にのみ存在し、テストから呼び出されるメソッドです。だから、フラッシュでスパイすることは、あなたがテストからそれを呼んだことを確認するだけです。それはあなたのテストです、あなたが行った/しなかったことを知っています、なぜあなたはそれをチェックしたいですか? –