0

私は 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');
            }
        });
    }
});

どんな助けでも大歓迎です。

4

2 に答える 2