У меня есть следующий код, который я пытаюсь написать модульные тесты для использования мокко. В некоторых случаях это работает как ожидалось, однако в других случаях обещание, похоже, никогда не разрешилось. Не могли бы вы помочь мне решить эту проблему.Mongoose обещание не разрешается при определенных условиях
Код тестируемой:
exports.inGroup = (group, user) ->
return user.groups.indexOf(group) >= 0
##
# A promise returning function that returns the list
# of viewable channels for a user.
##
exports.getUserViewableChannels = (user) ->
# if admin allow all channels
if exports.inGroup 'admin', user
return Channel.find({}).exec()
else
# otherwise figure out what this user can view
return Channel.find({ txViewAcl: { $in: user.groups } }).exec()
Теперь, когда я проверяю пользователя, не админ это работает отлично:
user = new User
firstname: 'Some'
surname: 'User'
email: '[email protected]'
groups: [ 'HISP' , 'group2' ]
it "should return channels that a user can view", (done) ->
promise = authorisation.getUserViewableChannels user
promise.then (channels) ->
channels.should.have.length(2)
done()
, (err) ->
done err
Однако, когда я испытываю пользователя админ обещание не постановляю:
user3 = new User
firstname: 'Random'
surname: 'User'
email: '[email protected]'
groups: [ 'admin' ]
it "should return all channels for viewing if a user is in the admin group", (done) ->
promise = authorisation.getUserViewableChannels user3
promise.then (channels) ->
channels.should.have.length(3)
done()
, (err) ->
done err
В этом случае времена испытаний мокко из:
Error: timeout of 2000ms exceeded
Просто случайный совет: Mocha поддерживает обещания из коробки в последних версиях, вы можете просто вернуть обещание и тест будет проходить или не на основе выполняет ли он/отклоняет соответственно. –
О, потрясающе! Спасибо, что я этого не знал. –