Skip to content

Instantly share code, notes, and snippets.

@jacquesbh
Created March 6, 2014 15:56
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jacquesbh/9392806 to your computer and use it in GitHub Desktop.
Save jacquesbh/9392806 to your computer and use it in GitHub Desktop.
/*
* Dans un test j'ai ça : var ret = this.login(customer_email, customer_password);
* Dans un pre.js j'ai la méthode suivante :
*/
casper.login = function(username, password) {
this.thenOpen(url_customer_account_login, function() {
utils.dump('foo');
this.fill('form#login-form', {
'login[username]': (username ? username : login_user_username),
'login[password]': (password ? password : login_user_password)
}, true);
}).then(function() {
utils.dump('bar');
// Ici "foo" vaut un boolean qui me permet de savoir si le login a réussi ou non.
var foo = this.exists('.customer-account-index');
});
utils.dump('baz');
// Ici j'aimerai retourner un bool qui indique si le mec est connecté ou non
return this;
};
@n1k0
Copy link

n1k0 commented Mar 6, 2014

Il te faut un callback vu que l'opération d'authentification est asynchrone:

casper.login("foo", "bar", function(status) {
  // status is a boolean you can test for
});

@n1k0
Copy link

n1k0 commented Mar 6, 2014

Si tu veux vraiment garder une promesse casper:

casper.login = function(username, password) {
  return this.thenOpen(url_customer_account_login, function() {
    this.fill();
  }).then(function() {
    this.then(this.createStep(function(){}, {
      data: this.exists('.customer-account-index')
    }));
  });
};
casper.login("foo", "bar").then(function(res) {
  //  res.data doit contenir ton statut
});

(non testé)

@jacquesbh
Copy link
Author

Donc dans mon test il faudrait que j'ai ça par exemple ?

casper.test.begin('Test', function suite(test) {

    // Login first
    casper.login(customer_email, customer_password, function (status) {
        if (status) {
            // Next connected
        } else {
            // Next not connected
        }
    })

    .then(function () {
        // After all
    })

    .run(function () {
        test.done();
    });
});

Et au niveau du pre.js :

// Login the user
casper.login = function(username, password, callback) {

    this.thenOpen(url_customer_account_login, function() {

        utils.dump('foo');

        this.fill('form#login-form', {
            'login[username]': (username ? username : login_user_username),
            'login[password]': (password ? password : login_user_password)
        }, true);

    }).then(function() {

        utils.dump('bar');

        // Ici "foo" vaut un boolean qui me permet de savoir si le login a réussi ou non.
        callback(this.exists('.customer-account-index'));

    });

    utils.dump('baz');

    return this;
};

@n1k0
Copy link

n1k0 commented Mar 6, 2014

D'une façon générale il faut éviter d'avoir des tests dépendants de branches différentes de navigation ; il vaut mieux écrire un test distinct par contexte d'utilisation (ici deux tests, un pour anthentification réussie, un autre pour auth échouée)

@jacquesbh
Copy link
Author

Du genre passer par quelque chose comme ça ? (en gros)

// Login the user
casper.login = function(username, password, callbacks) {

    return this.thenOpen(url_customer_account_login, function() {

        utils.dump('foo');

        this.fill('form#login-form', {
            'login[username]': (username ? username : login_user_username),
            'login[password]': (password ? password : login_user_password)
        }, true);

    }).then(function() {

        utils.dump('bar');

        // Ici "foo" vaut un boolean qui me permet de savoir si le login a réussi ou non.
        if (this.exists('.customer-account-index')) {
            if (callbacks.onSuccess) {
                callbacks.onSuccess();
            }
        } else {
            if (callbacks.onFailure) {
                callbacks.onFailure();
            }
        }

    });

};

Edit: En fait c'est surtout que j'ai des tests de partout et parfois l'utilisateur enregistré, que je supprime, n'a pas été supprimé lors des précédents tests qui étaient en FAIL. Donc je tente juste ici de faire ce qu'il faut pour supprimer ou créer si je n'ai pas, afin de continuer... sans erreur.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment