柴没有到达 .end()

Posted

技术标签:

【中文标题】柴没有到达 .end()【英文标题】:Chai not reaching .end() 【发布时间】:2016-09-08 13:33:54 【问题描述】:

我正在使用 Mocha 和 Chai 测试我的 Node/Express API,但我无法弄清楚为什么测试没有到达 .end()

这是测试:

it('should authenticate successfully with user credentials', function (done) 
    agent
        .post('/login')
        .set('Content-Type', 'application/x-www-form-urlencoded')
        .send( 'username': 'username', 'password': 'password')
        .end(function (err, res) 
            console.log(res);
            console.log('***************************Authenticated*********************************************');
            expect(res).to.have.status(200);
        );
    done();
);

这是我要走的路线:

app.post('/login', passport.authenticate('ldapauth',  successRedirect: '/' ));

我认为我的问题可能在于没有正式响应,而是重定向,但我不确定如何处理它。

【问题讨论】:

首先将done()移动到end处理程序内部 【参考方案1】:

如果您正在测试异步方法 int mocha,您应该在回调函数中调用 call 方法,如下所示。

it('should authenticate successfully with user credentials', function (done) 
        agent
            .post('/login')
            .set('Content-Type', 'application/x-www-form-urlencoded')
            .send( 'username': 'username', 'password': 'password')
            .end(function (err, res) 
                console.log(res);
                console.log('***************************Authenticated*********************************************');
                expect(res).to.have.status(200);
                done();
            );

    );

【讨论】:

【参考方案2】:

解决方案最终是将 done() 回调移动到我的 .end() 方法中。谢谢@robertklep

【讨论】:

【参考方案3】:

我对 chai 请求有同样的问题。我想在转到另一个函数之前等待 .end 回调。但我不能用摩卡,因为我用的是黄瓜。如何等待 chai .end 回调? 事实上,我想先记录(1)但它不能正常工作

When('I submit with method string:', function (string, docString) 
  chai.request(app)
  .post(endpoint)
  .send(docString)
  .end(function (err, res) 
    console.log(1)
    response = res
  )
);

Then('I recieved ok', function () 
  console.log(2)
  // expect(response.status).to.deep.equal(200)
);

【讨论】:

以上是关于柴没有到达 .end()的主要内容,如果未能解决你的问题,请参考以下文章

摩卡柴解决多个承诺

markdown 挑战05:使用摩卡柴进行测试

html 摩卡/柴锅炉

Linux C语言编译警告:control reaches end of non-void function

mac 入门操作

游戏体验Shoot'm(暴打火柴人)