Ошибка: done() вызывается без ошибки: запрос {"req":{ ......} выполнен без ошибок, но тест не пройден

avatar
Viktorija Filipov
8 апреля 2018 в 12:24
816
1
0

Я пытаюсь пройти тест, но ничего не получается. В настоящее время я использую mocha, supertest и chai, но даже если запрос был выполнен успешно, я вижу эту досадную ошибку, от которой не могу избавиться:

done() вызывается без ошибки: {"req":{ …} запрос выполнен без ошибок, но тест не пройден

Код:

let should = require('chai').should(),
    expect = require('chai').expect,
    constants = require('./constants'),
    supertest = require('supertest'),
    api = supertest(constants.ENVIRONMENT),
    express = require('express'),
    http = require('http'),
    request = require('request'),
    app = express(),
    bodyParser = require('body-parser'),
    port = process.env.PORT || 3000,
    assert = require('assert');
    
    describe('Create device API call', () => {

    function createToken() {
        return new Promise(resolve =>
            request.post(
                'myURl',
                { 
                 json: 
                        { 
                          "username": "myUsername", 
                          "password": "myPassword" 
                        } 
                },
                function (error, response, body) {
                    if (!error && response.statusCode == 200) {
                        let token = (body.accessList[0].accessToken);
                        resolve(token);

                    }
                    else {
                        console.log("Server error get token")
                    }

                })
        )
    }

    it('should create device', async (done) => {

        let token = await createToken();

        //console.log(`Token is ${token}`);

        api.post('/deviceManifests/1/devices')
            .set('Accept', 'application/json')
            .set('Authorization', `Bearer ${token}`)
            .send({
                "name": "QA integration",
                "deviceKey": "somekey38957",
                "defaultBinding": true
            })
            .expect('content-Type', /json/)
            .expect(201)
            .expect(function (res, err) {
                assert.equal(res.body.name, 'QA integration');

            }).then(done);
    });

});    
Источник
user2347763
9 апреля 2018 в 11:47
0

Помимо изменения then для включения функции или функции клавиши со стрелкой, добавьте блок catch после .then для неразрешенного отклонения обещания. Не думайте, что нет ошибок без улова для сценария отклонения обещания.

Viktorija Filipov
9 апреля 2018 в 18:00
1

Большое спасибо, тем временем я решил это так же, как вы сказали :)

Ответы (1)

avatar
Steve Holgado
8 апреля 2018 в 14:29
1

Вы передаете done в затем.

Поэтому done будет передан аргумент.

Однако, если вы передаете аргумент done, он ожидает, что это будет ошибка.

Попробуйте вместо этого:

.then(function () {
  done()
})

...или с помощью функции стрелки:

.then(() => done())
yPhil
4 февраля 2021 в 11:41
0

> ожидается, что это будет ошибка Да, но что такое ошибка? Я продолжаю получать done() invoked with non-Error независимо от того, что я перехожу к done().

Steve Holgado
4 февраля 2021 в 12:03
0

@yPhil Этот обратный вызов done принимает экземпляр Error или ложное значение. Документы здесь: mochajs.org/#asynchronous-code

yPhil
4 февраля 2021 в 13:14
0

Спасибо! Теперь мне просто нужно выяснить, что именно представляют собой эти две вещи (экземпляр ошибки (или его подкласс) или ложное значение). Обратите внимание, что документы не предоставляют никакого определения или ссылки :( Мое приложение выдает ошибку, которая передается на done(), поэтому мне нужно знать, что такое допустимая ошибка точно ; может быть, список. Но хорошо, я попробую false.

Steve Holgado
4 февраля 2021 в 13:17
0

@yPhil См. документы здесь: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… и developer.mozilla.org/en-US/docs/Glossary/ Фальси

Steve Holgado
4 февраля 2021 в 13:22
0

@yPhil Нет проблем :)