私は Cucumber と Velocity を初めて使用し、登録ユーザーのログイン フローをテストしたいと考えています。ユーザーがログインすると、読み込みスピナーが永久にハングします。 Meteor.loggingIn()
戻りますfalse
。コレクション内のユーザーを確認できmeteor-cucumber
、偽の電子メールとパスワードを入力すると、ログイン試行が失敗したことが即座に警告されます。
これが私の一部ですlogin-user.feature
Background:
Given the user database is reset
And the user is logged out
And the user is at '/login'
@dev
Scenario: a registered user with a verified email address wants to login
Given the user is registered and verified
When the user has entered the required login information
And the clicks the "Login" button
Then the user will be viewing the 'story-of-the-day' template
そして、ここに私のステップ定義があります:
this.Given(/^the user database is reset$/, function () {
server.call('_clearUsers');
});
this.Given(/^the user is logged out$/, function () {
server.call('_logout');
});
this.When(/^the user is at '\/login'$/, function () {
client.url(path.join(process.env.ROOT_URL, '/login'));
client.waitForExist('.template-login');
});
this.Given(/^the user is registered and verified$/, function () {
userID = server.call('_createUser');
expect(userID).toBeDefined();
var result = server.call('_setVerifiedEmail', userID);
expect(result).toBe(1);
});
this.When(/^the user has entered the required login information$/, function () {
client.setValue("#login-email", "xdzcaslm@sharklasers.com");
client.setValue("#login-password", "Password123");
});
this.When(/^the clicks the "([^"]*)" button$/, function () {
client.submitForm("form");
});
this.Then(/^the user will be viewing the 'story\-of\-the\-day' template$/, function () {
client.waitForExist('.template-story-of-the-day');
});
関連する Meteor メソッドは次のとおりです。
Meteor.methods({
_createUser: function() {
return Accounts.createUser({
username: "PMoons",
email: "xdzcaslm@sharklasers.com",
password: "Password123",
profile: {
first_name: "Peter",
last_name: "Mooney"
}
});
},
_getUserID: function() {
return Meteor.users.findOne()._id;
},
_sendVerificationEmail: function(userID) {
Accounts.sendVerificationEmail(userID);
},
_getVerificationToken: function(userID) {
return Meteor.users.findOne(userID).services.email.verificationTokens[0].token;
},
_setVerifiedEmail: function(userID) {
return Meteor.users.update({'_id': userID}, {$set: {'emails.0.verified': true}});
},
_logout: function() {
Meteor.users.update({}, {$set: { "services.resume.loginTokens" : [] }});
},
_clearUsers: function() {
Meteor.users.remove({});
}
});
アプリのログイン ロジックは次のとおりです。
Template.login.events({
'submit form': function(event, template) {
event.preventDefault();
$(event.target).blur();
var email = template.find('#login-email').value;
var password = template.find('#login-password').value;
Meteor.loginWithPassword(email, password, function(error){
if(error){
alert('Login attempt failed. Please try again.');
} else {
Router.go('/dashboard');
}
});
}
});
どんな助けでも大歓迎です。