Проверка успешности загрузки с помощью супертеста

Я тестирую конечные точки API с помощью супертеста, и он отлично работает, но я не могу понять, как проверить, загрузка прошла успешно.

В моем файле маршрутов я определил конечную точку:

app.get('/api/attachment/:id/file', attachment.getFile);

а функция getFile() выглядит примерно так:

exports.getFile = function(req, res, next) {
    Attachment.getById(req.params.id, function(err, att) {
        [...]
        if (att) {
            console.log('File found!');
            return res.download(att.getPath(), att.name);
        }

Затем в моем тестовом файле я пытаюсь сделать следующее:

describe('when trying to download file', function() {
    it('should respond with "200 OK"', function(done) {
        request(url)
        .get('/api/attachment/' + attachment._id + '/file');
        .expect(200)
        .end(function(err, res) {
            if (err) {
                return done(err);
            }
            return done();
        });
    });
});

Я точно знаю, что файл найден, потому что он выходит из системы File found!. Это также отлично работает, если я пытаюсь вручную, но по какой-то причине мокко возвращает Error: expected 200 "OK", got 404 "Not Found".

Я экспериментировал с разными типами пантомимы и супертестом .set("Accept-Encoding": "*"), но ничего не работает.

Кто-нибудь знает, как это сделать?


person Martin Hallén    schedule 17.07.2014    source источник
comment
Если вы попытаетесь загрузить с открытыми инструментами разработчика Chrome, появятся ли какие-либо ошибки? Мне интересно, отправляете ли вы файл как страницу с ошибкой 404.   -  person Arcath    schedule 20.10.2015
comment
@ mart0903, вы когда-нибудь находили решение этой проблемы?   -  person David Cruwys    schedule 13.12.2015
comment
Вы можете добавить необязательную функцию обратного вызова res.download, чтобы узнать, в чем именно заключается ошибка. Я предполагаю, что вы получаете эту ошибку, потому что res.download обычно предлагает браузеру сообщить пользователю о загрузке вложения, и нет никакого способа предложить пользователю, поскольку вы делаете это программно.   -  person Quy    schedule 14.12.2015
comment
@DavidCruwys: Боюсь, что нет. Я больше не работаю над этим проектом, но у нас не было хороших тестов по этому критерию.   -  person Martin Hallén    schedule 14.12.2015
comment
@Quy: Это интересно, я обязательно проверю это в следующий раз, когда столкнусь с этой проблемой. Не работайте больше в той же компании.   -  person Martin Hallén    schedule 14.12.2015


Ответы (1)


Либо проблема была исправлена ​​в библиотеках, либо в какой-то другой части вашего кода есть ошибка. Ваш пример работает нормально и дает

  when trying to download file
File found!
    ✓ should respond with "200 OK"
person bolav    schedule 14.02.2016