У меня есть приложение node.js, используя async utilities, чтобы разбить вложенные обратные вызовы.Жасмин не смог вызвать функцию, вызванную внутри блока async.waterfall
И я пытаюсь шпионить функции, которые прилагаются async.waterfall в моих спецификациях жасмина, но всегда возникают сбои.
Следующий код может воспроизвести ошибку:
async = require 'async'
app = hi: ->
fn = ->
# app.hi() # works
async.waterfall [
(cb) ->
app.hi() # doesn't work
cb null
], (err) ->
describe 'jasmine', ->
beforeEach ->
spyOn app, 'hi'
it 'test async.waterfall', ->
spyOn app, 'hi'
fn()
expect(app.hi).toHaveBeenCalled()
Провал сообщений:
Failures:
1) jasmine test async.waterfall
Message:
Expected spy hi to have been called.
Stacktrace:
Error: Expected spy hi to have been called.
at new jasmine.ExpectationResult (/Volumes/ws/prj/litb/crm/node_modules/jasmine-node/lib/jasmine-node/jasmine-1.3.1.js:114:32)
at null.toHaveBeenCalled (/Volumes/ws/prj/litb/crm/node_modules/jasmine-node/lib/jasmine-node/jasmine-1.3.1.js:1235:29)
at null.<anonymous> (/Volumes/ws/prj/litb/crm/tests/job/indexSpecs.coffee:51:29)
at jasmine.Block.execute (/Volumes/ws/prj/litb/crm/node_modules/jasmine-node/lib/jasmine-node/jasmine-1.3.1.js:1064:17)
at jasmine.Queue.next_ (/Volumes/ws/prj/litb/crm/node_modules/jasmine-node/lib/jasmine-node/jasmine-1.3.1.js:2096:31)
at jasmine.Queue.start (/Volumes/ws/prj/litb/crm/node_modules/jasmine-node/lib/jasmine-node/jasmine-1.3.1.js:2049:8)
at jasmine.Spec.execute (/Volumes/ws/prj/litb/crm/node_modules/jasmine-node/lib/jasmine-node/jasmine-1.3.1.js:2376:14)
at jasmine.Queue.next_ (/Volumes/ws/prj/litb/crm/node_modules/jasmine-node/lib/jasmine-node/jasmine-1.3.1.js:2096:31)
at jasmine.Queue.start (/Volumes/ws/prj/litb/crm/node_modules/jasmine-node/lib/jasmine-node/jasmine-1.3.1.js:2049:8)
at jasmine.Suite.execute (/Volumes/ws/prj/litb/crm/node_modules/jasmine-node/lib/jasmine-node/jasmine-1.3.1.js:2521:14)
at jasmine.Queue.next_ (/Volumes/ws/prj/litb/crm/node_modules/jasmine-node/lib/jasmine-node/jasmine-1.3.1.js:2096:31)
at onComplete (/Volumes/ws/prj/litb/crm/node_modules/jasmine-node/lib/jasmine-node/jasmine-1.3.1.js:2092:18)
at jasmine.Suite.finish (/Volumes/ws/prj/litb/crm/node_modules/jasmine-node/lib/jasmine-node/jasmine-1.3.1.js:2478:5)
at null.onComplete (/Volumes/ws/prj/litb/crm/node_modules/jasmine-node/lib/jasmine-node/jasmine-1.3.1.js:2522:10)
at jasmine.Queue.next_ (/Volumes/ws/prj/litb/crm/node_modules/jasmine-node/lib/jasmine-node/jasmine-1.3.1.js:2106:14)
at onComplete (/Volumes/ws/prj/litb/crm/node_modules/jasmine-node/lib/jasmine-node/jasmine-1.3.1.js:2092:18)
at jasmine.Spec.finish (/Volumes/ws/prj/litb/crm/node_modules/jasmine-node/lib/jasmine-node/jasmine-1.3.1.js:2350:5)
at null.onComplete (/Volumes/ws/prj/litb/crm/node_modules/jasmine-node/lib/jasmine-node/jasmine-1.3.1.js:2377:10)
at jasmine.Queue.next_ (/Volumes/ws/prj/litb/crm/node_modules/jasmine-node/lib/jasmine-node/jasmine-1.3.1.js:2106:14)
at null._onTimeout (/Volumes/ws/prj/litb/crm/node_modules/jasmine-node/lib/jasmine-node/jasmine-1.3.1.js:2086:18)
at Timer.listOnTimeout [as ontimeout] (timers.js:110:15)
Но это проходит, если вызов функции (которая должна быть шпионом) находится вне блока водопада ,
Хотелось бы узнать, есть ли что-то не в порядке с моим кодом? или он не поддерживается жасмином или асинксом?
Спасибо, это работает. На самом деле, я попытался запустить/ждать, прежде чем публиковать этот вопрос, но я поставил шпионы в 'beforeEach' часть, и это не сработало, так в чем разница между определением шпионов в' beforeEach' и в блоке spec? – xinthink