我正在使用Mocha和Chai为我的Meteor应用程序编写集成测试。这些测试仅针对服务器功能。
我可以用Sinon伪造一个Meteor用户,但理想情况下,我想从真正的用户登录开始。然而,我不知道如何在服务器上做到这一点。
我正在远程服务器上进行身份验证;
服务器代码:
Accounts.registerLoginHandler((loginRequest) => {
if ((remoteAuthenticate(loginRequest.username, loginRequest.password)) === true) {
// remoteAuthenticate is a function that handles login against the remote server
...
// handle login success and failure
}
});
在客户机上调用它,如下所示:
Accounts.callLoginMethod({
'methodArguments': [{
'username': username,
'password': password,
}],
'userCallback': function (err) {
if (err) {
Session.set('invalidCredentials', true);
}
},
});
从客户端登录可以很好地工作,但我不知道如何在测试中直接在服务器上调用Login方法。似乎没有Meteor或Accounts方法可以做到这一点。谢谢你的建议!
发布于 2019-04-15 02:42:07
假设已经创建了用户,您可以使用DDP
连接和一个名为ongoworks:ddp-login
的包从远程进行身份验证。它被设计为同时在服务器和客户端工作。
首先将包添加到您的项目中:
meteor add ongoworks:ddp-login
然后在测试中创建连接,并将其传递给登录调用:
const url = https://your.server.tld
const connection = DDP.connect(url);
// describe login
it('logs in to the remote if the user exists', function (done) {
DDP.loginWithPassword(conn, {username: 'admin'}, 'admin', function (error) {
if (error) {
done(error)
} else {
done()
}
})
})
connection
实例的行为类似于您的Meteor
全局实例,它本身在缺省情况下总是配置了一个默认连接。
例如:如果您需要使用登录用户从远程调用方法,您可以使用connection
实例来调用这些方法:
// describe method x
it('returns some value', function (done) {
DDP.loginWithPassword(conn, {username: 'admin'}, 'admin', function (error) {
// handle error...
connection.call('method x', (err, res) => { /* handle err / res */ })
})
})
资源:
https://stackoverflow.com/questions/55569762
复制相似问题