出现错误:解决方法指定过多。指定一个回调*或*返回一个Promise;不是都

时间:2019-10-14 13:57:33

标签: node.js mocha node-modules chai

当我运行函数时,它给我错误: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 :(得分:0)

这是摩卡咖啡的“问题”。从您的代码中删除done()。在chai.request中使用Promises时,这是多余的。

  

您返回的是Promise,因此通话完成是多余的,因为它在   错误消息

     

在较旧的版本中,必须在异步方法的情况下使用回调   这样

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

现在,您可以选择返回诺言

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

发件人:this stack

答案 1 :(得分:0)

在定义done单元测试函数时不要使用async,而应像在await处理来自{{1}的请求之后,从异步方法中正常返回一样}:

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); }); }); 进行您的功能。