Если часть определения logOut
состоит в том, что он вызывает PreLogoutCallback
, то это часть модульного теста logOut
. Можно использовать registerPreLogoutCallback
как часть теста, но вы не тестируете registerPreLogoutCallback
. Вместо этого registerPreLogoutCallback
получает свой собственный модульный тест.
logOut
модульный тест будет включать что-то вроде этого неопределенно Javascript -образного псевдокода.
// Set the callback to be a closure around `preLogoutCalled`.
// registerPreLogoutCalled() has its own unit test, we know it works.
var preLogoutCalled = false
registerPreLogoutCallback( function() { preLogoutCalled = true } )
// Logout
logOut()
// Check the callback was called
assert(preLogoutCalled)
Если logOut
отвечает за передачу аргументов в обратный вызов, вы можете поместить тесты в сам обратный вызов, чтобы убедиться, что обратный вызов получил правильные аргументы. Допустим, обратный вызов получает текущего пользователя.
logged_in_user = ...
registerPreLogoutCallback(
function(user) { assertEq(user, logged_in_user) }
)
logOut()
Самое приятное, что он полностью черный ящик . Вызов обратных вызовов является частью определенного поведения logOut
. Нет необходимости делать предположения о том, как реализовано logOut()
.