Сообщение от Gozar
|
Запрашивай заголовки, если по заголовкам картинка, качаешь, если "фига" то нет.
|
хотелось бы вообще убрать HTTP из теста...
Сообщение от Zend
|
кстати я не вижу смысла в этом тесте так как там нет done().
|
там возвращается Promise.
Сообщение от Zend
|
по моему должно быть так:
- ждёшь завершения асинхронных штук
- в колбэке проверяешь то что тебе нужно
- вызываешь done()
ещё не плохо время контролировать, за которое тест должен выполниться
не хочешь ждать, уверен что там всё ок - отключи его, добавь "x":
xit('......
кстати чем тестируешь? mocha?
|
да, mocha. и с ней chai с плагинами
в общем, порешил дело! отрефакторил функцию, вынесев ввод\вывод (HTTP запрос и запись в файл) в отдельные 2 функции:
/** Скачает изображение по ссылке, сохранит в папку */
exports.downloadImage = function (imageURL) {
var ext = path.extname(imageURL);
var imageName = utils.getImageName(imageURL);
var dest = path.join(imageSavePath, imageName);
/** @type {Object} RESOLVE ARGUMENT */
var info = {imageURL: imageURL, dest: dest, ext: ext, imageName: imageName};
return exports.downloadImage.request(imageURL).
then(function (buffer) {
return exports.downloadImage.write(dest, buffer);
}).
return(info);
};
// Скачает ответ по ссылке и вернёт результат в формате буфера
exports.downloadImage.request = function (url) {
return request({url: url, encoding: null}).get(1);
};
// Запишет буфер buffer в файл dest
exports.downloadImage.write = function (dest, buffer) {
return fs.writeFileAsync(dest, buffer);
};
( request - это var request = Promise.promisify(require('request')); )
ну и в тестах сделал подмену на эти две функции (request и write)
describe('downloadImage', function () {
var original = {};
var url = 'http://i.imgur.com/emZNv0N.jpg';
var buffer = new Buffer('Hello');
var fakeRequest = sinon.stub().withArgs(url).returns(Promise.resolve(buffer));
var fakeWrite = sinon.stub().returns(Promise.resolve());
beforeEach(function () {
original.request = utils.downloadImage.request;
original.write = utils.downloadImage.write;
utils.downloadImage.request = fakeRequest;
});
afterEach(function () {
utils.downloadImage.request = original.request;
utils.downloadImage.write = original.write;
});
it('should download image by url', function () {
return utils.
downloadImage('http://i.imgur.com/emZNv0N.jpg').
should.eventually.
include({imageURL: 'http://i.imgur.com/emZNv0N.jpg', ext: '.jpg'}).
and.property('imageName').match(/^product-image-/);
});
});
как видите, сам тест (внутри 'it') остался таким же, как и поведение самой функции. успех!
тестировать её помощников (request и write) не вижу смысла, т.к. это обёрнутые вызовы библиотечных\встроенных функций