我正在尝试编写一些我需要首先进行身份验证的测试。如果我在“before()”中发出多个请求,我会拒绝连接。如果我在“before()”和“it()”之间拆分它可行,但我无法实现我想要的。
我想工作的代码:
var agent = request.agent(myExpressApp),
token;
before(function(done) {
async.series([
function(cb) {
agent
.post('/1/auth/login')
.send({
email: 'john@smith.com',
password: 'j0hn_Sm1TH'
})
.expect(200)
.end(cb);
}, function(cb) {
agent
.get('/1/auth/authorize')
.query({
response_type: 'token',
client_id: 'some id',
redirect_uri: 'http://ignore'
})
.expect(302)
.end(function(err, res) {
/* console.log(arguments) = { '0':
{ [Error: connect ECONNREFUSED]
code: 'ECONNREFUSED',
errno: 'ECONNREFUSED',
syscall: 'connect' } }*/
if (err) return cb(err);
cb();
});
}
], done);
});
it('some authenticated task', function(done) {
// do something else
done();
});
正在运行的代码:
var agent = request.agent(myExpressApp),
token;
before(function(done) {
async.series([
function(cb) {
agent
.post('/1/auth/login')
.send({
email: 'john@smith.com',
password: 'j0hn_Sm1TH'
})
.expect(200)
.end(cb);
}, function(cb) {
cb();
}
], done);
});
it('some authenticated task', function(done) {
agent
.get('/1/auth/authorize')
.query({
response_type: 'token',
client_id: 'some id',
redirect_uri: 'http://ignore'
})
.expect(302)
.end(function(err, res) {
if (err) return done(err);
done();
});
});
答案 0 :(得分:0)
您遇到了issue 153 with superagent。令人烦恼和神奇的是,superagent会查看传递给它的回调函数的arity。如果声明函数接受2个参数,则superagent符合(error, result)
的节点约定,但是,如果回调函数看起来像是期望任何其他数量的参数(在使用async.js的情况下为零),它调用函数只是callback(res)
,我猜TJ认为它对浏览器很好,但对于节点来说它完全违反惯例。
有问题的代码行是here