У меня есть следующий контроллер в моем угловом приложении.
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(->
..
..
)
Я удаляю много вещей, поэтому только важная часть показывает. То, что у меня возникают проблемы, связано с моим использованием Angular $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
используется в этой части кода, так как это важно, как некоторые изображения визуализированы, когда я нахожусь в Phantom (библиотека рендеринга изображения). Когда я запускаю тест, я получаю следующее сообщение об ошибке:
Expected spy flush to have been called.
Конкретная проблема у меня в следующие две строки в моем тесте:
spyOn($timeout, "flush")
expect($timeout.flush).toHaveBeenCalled()
Прежде всего, я не верю, я вызываю правильный метод для $timeout
. В моем контроллере очень ясно, я звоню $timeout
, а не $timeout.flush
. Во-вторых, для Jasmine Spys вы не можете просто spyOn
$timeout
, так как ему нужна ссылка на класс и метод.
Так что я не совсем уверен, как двигаться дальше. Буду признателен за любую помощь - спасибо!
'flush' - это метод, который существует только в' ngMock', который вызывается из тестов. Таким образом, шпионаж на флеш только проверки, чтобы увидеть, что вы вызвали его из теста. Это ваш тест, вы знаете, что вы это сделали, но почему бы вам не проверить его? –