我正在使用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);
}
},
});
从客户端登录可以正常工作,但是我无法确定如何在测试中直接在服务器上调用登录方法。流星或帐户方法似乎都没有这样做。感谢您的任何建议!
答案 0 :(得分:0)
假设已经创建了用户,则可以使用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 */ })
})
})
资源: