Обратный вызов вызывается дважды, когда мой модульный тест не пройден
Я не могу понять, почему мой обратный вызов save вызывается дважды в моем тесте mocha, когда обратный вызов не удался. Он не вызывает сохранение дважды, он только вызывает обратный вызов для сохранения снова, но с ошибкой "следует", когда мой 2-й модульный тест не пройден. Если я уберу несостоятельное утверждение "должен" should.exist err
из второго теста, кажется, работает нормально и не вызывает дважды обратный вызов сохранения индекса.
class User
constructor : (@name, @email, @pwd) ->
save : (callback) ->
unless this.validate()
throw new Error('invalid data')
else
user =
name : @name
email : @email
pwd : @pwd
node = db.createNode user
node.save (err) ->
unless err
user.id = node.id;
node.index 'User', 'name', user.name.toLowerCase(), (err2) ->
#why is this being fired twice when an assert in the callback fail?
console.log '----------- triggering the save callback'
callback err2, user
else
callback err
тест мокко
describe "User", ->
it "should be able to save", (done) ->
user = new User("quark", "quark@ds9.com", "profit")
user.save (err, result) ->
should.exist result
done err
#this second unit test should fail since the duplicate checking is not yet implemented
it "should not allow duplicates to be saved", (done) ->
user = new User("quark", "quark@ds9.com", "profit")
user.save (err, result) ->
console.log err
should.exist err #this triggers the user.save callback to be fired twice
done null
И результаты теста
User
◦ should be able to save: ----------- triggering the save callback
✓ should be able to save (43ms)
◦ should not allow duplicates to be saved: ----------- triggering the save callback
undefined
----------- triggering the save callback
{ name: 'AssertionError',
message: 'expected undefined to exist',
actual: undefined,
expected: undefined,
operator: undefined }
✓ should not allow duplicates to be saved
✔ 2 tests complete (69ms)
1 ответ
Ну, во-первых, наличие тестов с заранее заданным порядком - плохая форма. Ваш второй тест должен попытаться сохранить двух пользователей в базе данных, а не полагаться на первый тест.
Во-вторых, я могу только предположить, что db
это узел-neo4j Database
в этом контексте и что ваша структура утверждений (should.js? chai?) использует исключения. Так что мой ответ основан на этом предположении.
Кажется, что node-neo4j вызывает функцию обратного вызова в случае исключения.
Попробуйте просто сделать throw 'blah'
вместо should
утверждение, чтобы увидеть, если вы можете сузить это к этому. Это не указано в документации по node-neo4j, поэтому похоже на ошибку.
Смотрите: http://coffeedoc.info/github/thingdom/node-neo4j/master/classes/Node.html