Короткий ответ: вы не имитируете обратный вызов, потому что это часть темы, которую вы пытаетесь проверить. Ваш текущий тест не работает, потому что ssh-exec
не возвращает обещание; он принимает и вызывает обратный вызов. В общем, тестовые двойники должны соответствовать интерфейсу того, что они заменяют.
Вместо этого используйте свой mocked ssh-exec
для вызова real callback: *
В качестве альтернативы создайте свою собственную оболочку для ssh-exec
, которая лучше соответствует вашему варианту использования:
const sshPromise = (...args) => new Promise((resolve, reject) => {
sshExec(...args, (err, stdout, stderr) => {
if (err) {
reject(err);
} else if (stderr) {
reject(stderr);
} else {
resolve(stdout);
}
});
});
Теперь вы можете имитировать этот более простой интерфейс, которым вы владеете, и ваш исходный тест будет работать должным образом. .
Это также упрощает код потребления:
const myCodeThatUsesSshExec = (arg1, arg2, arg3) => sshPromise('ls -lh', 'ubuntu@my-remote.com')
.then((stdout) => {
// process stdout
const results = process stdout into an array...
return results;
});