Получение ошибки: метод разрешения переопределен. Укажите обратный вызов * или * вернуть обещание;не оба - PullRequest
0 голосов
/ 14 октября 2019

при запуске функции выдает ошибку: Resolution method is overspecified. Specify a callback *or* return a Promise; not both. Может кто-нибудь проверить мой код и помочь решить эту проблему? здесь я разместил свой полный код

it('Get Organizations', async function (done) {
        let user_permission = await commonService.getuserPermission(logged_in_user_id,'organizations','findAll');
        let api_status = 404;
        if(user_permission) { 
            api_status = 200;
        }

        let current_token = currentResponse['token'];
        old_unique_token = current_token;

        chai.request(app)
            .post('entities')
            .set('Content-Type', 'application/json')
            .set('vrc-access-token', current_token)
            .send({ "key": "organizations", "operation": "findAll" })
            .end(function (err, res) {
                currentResponse = res.body;
                expect(err).to.be.null;
                expect(res).to.have.status(api_status);
                done();
            }); 

    });

Ответы [ 2 ]

0 голосов
/ 14 октября 2019

Не используйте done при определении функции модульного теста async, просто просто верните, как обычно, из асинхронного метода, после await запроса от chai-http:

it('Get Organizations', async function () {
        let user_permission = await commonService.getuserPermission(logged_in_user_id,'organizations','findAll');
        let api_status = 404;
        if(user_permission) { 
            api_status = 200;
        }

        let current_token = currentResponse['token'];
        old_unique_token = current_token;

        await chai.request(app) // note 'await' here
            .post('entities')
            .set('Content-Type', 'application/json')
            .set('vrc-access-token', current_token)
            .send({ "key": "organizations", "operation": "findAll" })
            .then(function (err, res) { // not 'then', not 'end'
                currentResponse = res.body;
                expect(err).to.be.null;
                expect(res).to.have.status(api_status);
            }); 

    });

Бегущий по тестам автоматически await выполнит вашу функцию.

0 голосов
/ 14 октября 2019

Это проблема с мокко. Удалите done() из вашего кода. Он избыточен при использовании обещаний, как в chai.request.

. Вы возвращаете обещание, поэтому выполнение вызова избыточно, как сказано в сообщении об ошибке

В более старых версияхиспользуйте обратный вызов в случае асинхронных методов, подобных этому

it ('returns async', function(done) {    callAsync()   
 .then(function(result) {
       assert.ok(result);
       done();    }); })

Теперь у вас есть альтернатива возврата Promise

it ('returns async', function() {   return new Promise(function
(resolve) {
      callAsync()
        .then(function(result) {
           assert.ok(result);
           resolve();
        });   }); })

From: этот стек

...