Я использую модуль mv для перемещения файлов, более старый модуль, который все еще получает много загрузок и был полезен при перемещении файлов между томами докеров, а также за пределами докеров. Я создал метод для обработки метода mv как обещания.
При модульном тестировании я изо всех сил пытаюсь имитировать mv при использовании в методе.
import mv from 'mv';
export class CmdUtils {
/**
* Move a file to a new location. Using mv, this will attempt a mv command, however
* this could fail with docker volumes and will fallback to the mv module streaming
* data to the new location as needed.
* @param filePath - Full path to file
* @param destinationFilePath - Full path to file's new destination
*/
public static moveFile = (filePath: string, destinationFilePath: string): Promise<void> => {
return new Promise((resolve, reject) => {
mv(filePath, destinationFilePath, err => {
if (!err) {
resolve();
} else {
console.error('moveFile err', err);
reject(err);
}
});
});
}
}
Вот стартовый тест с пробелами:
import mv from 'mv';
import { CmdUtils } from './cmd-utils';
describe("CmdUtils: moveFile", () => {
it("should successfully move a file using mv module", async () => {
const sandbox = sinon.createSandbox();
try {
const moveFromPath = '/full/path/to/file.jpg';
const moveToPath = '/full/path/to/destination/file.jpg';
// Starting attempt at a replacement callback
const mvCallback = (err: Error) => {
if (!err) {
Promise.resolve();
} else {
console.error('moveFile err', err.message);
Promise.reject(err);
}
}
// Stub mv
sandbox.stub(mv)
// What am I missing here?
// Move file
await CmdUtils.moveFile(moveFromPath, moveToPath);
// expect no errors... (will revisit this)
} finally {
sandbox.restore();
}
});
});
Как имитировать успешное перемещение файла? Я вижу похожие вопросы, но пока не нахожу ответа.
moveFile
не позволяет заглушить cb наmv
. Вы не передаете обратный вызов в качестве аргумента, поэтому не можете заглушить его для использования вmv
. Кажется, вам нужно будет переделатьmoveFile
, чтобы получить доступ к обратному вызову и передать егоmv
для выполнения. - person Andrew Nolan   schedule 10.04.2020mv
, и передайте его как именованный параметрmoveFile
. Затем этот именованный параметр передается как обратный вызовmv
. Затем вы можете проверить, работает ли обратный вызов с помощьюresolve
илиreject
. Я сейчас напечатаю ответ. - person Andrew Nolan   schedule 10.04.2020moveFile('orig.jpg', 'new.jpg', someCallbackIDontCareAbout)
. Единственное, что меня беспокоит при использовании moveFile (), - это успешное перемещение файла в качестве обещания. - person Christopher Stevens   schedule 10.04.2020