IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Outils Discussion :

[Jasmine] Test sur une fonction de requêtes


Sujet :

Outils

  1. #1
    Membre régulier
    Homme Profil pro
    Symfony - CMS Wordpress - Zend
    Inscrit en
    Septembre 2011
    Messages
    306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Symfony - CMS Wordpress - Zend
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2011
    Messages : 306
    Points : 101
    Points
    101
    Par défaut [Jasmine] Test sur une fonction de requêtes
    Bonjour,

    Avec les test unitaires en JS -> Jasmine,

    Je voudrait tester ma fonction qui fait des requêtes sur l'api de google.

    Je sais pas trop comment mocker cette partie là?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    function translate() {
    return translate
                .translate(input,lang)
                .then(results => {
                    const translation = results[0];
                    console.log(`Text: ${input}`);
                    console.log(`Translation: ${translation}`);
                    return translation;
                })
                .catch(err => {
                    console.log('ERROR:',err);
                })
            ;
    }
    avec comme import:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    import * as Translate from '@google-cloud/translate';
    voici ce que je fait mais ca ne teste pas le type et la valeur de retour
    absence total de mocker sur cette partie là:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    describe('getTranslate function', () => {
            let input = 'Hello World';
            let lang = 'fr';
            let projectId = "my-project-id";
            let googleTrans = null;
     
            beforeEach(function() {
                googleTrans = new GoogleTranslate({
                    projectId: projectId
                });
                spyOn(translation, 'getTranslation').and.callFake((args, action) => {
                    //je ne sais pas quoi retourner à cet endroit
                    return;
                });
            });
            it('should be called', () => {
                translation.getTranslation(input, lang, googleTrans);
                expect(translation.getTranslation).toHaveBeenCalled();
            })
     
        });
    Merci.

  2. #2
    Expert éminent sénior
    Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 413
    Points : 19 609
    Points
    19 609
    Par défaut
    Il te faut passer en paramètre de ta fonction translate les dépendances exécutées à l'intérieur.

    Sinon tu ne peux rien mocker.

    Autre point, la bonne pratique avec les IO (j'imagine que google translate passe sur http ?) c'est de totalement les isoler pour les mettre en bordure de ton application.

    C'est à dire que tu devrais avoir une méthode qui effectue le call sur l'API et qui retourne la promesse et qui ne fait que ça (pas de résolution). L'appelant se chargeant d'exploiter la promesse.

    Enfin c'est un anti-pattern que de déclarer des variables globales à tes tests dans une suite de tests. Soit tu as de l'initialisation à faire à chaque test que tu initialises dans ton beforeEach, soit dans chaque test tu déclares et initialises les variables dont tu as besoin.

    Tu devrais avoir une variable input, une variable output, et une variable expected.


    Donc en résumé, je créerais une fonction executeGoogleTranslation qui prend en dépendance (donc en param de sa fonction) la lib de google.

    Je créerais une 2ème fonction translate qui prend en dépendance executeGoogleTranslation (donc en param de sa fonction) et qui est chargée d'exploiter la réponse.

    Tu as donc besoin de 2 suites de tests :

    - la première teste que executeGoogleTranslation appelle bien l'API de Google avec les bons paramètres
    - la deuxième teste que l'exploitation des données de l'API est faites correctement (affectations, traitements, gestion des erreurs).
    Un problème avec Git ? Essayez la FAQ, sinon posez votre question sur le forum.



    "Toute personne croyant qu'une croissance exponentielle peut durer indéfiniment dans un monde fini est soit un fou, soit un économiste."
    Kenneth E. Boulding

    "Les richesses naturelles sont inépuisables, car, sans cela, nous ne les obtiendrions pas gratuitement. Ne pouvant être ni multipliées ni épuisées, elles ne sont pas l’objet des sciences économiques."
    Jean-Baptiste Say, Traité d'économie politique, 1803.

    "/home/earth is 102% full ... please delete anyone you can."
    Inconnu

  3. #3
    Membre régulier
    Homme Profil pro
    Symfony - CMS Wordpress - Zend
    Inscrit en
    Septembre 2011
    Messages
    306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Symfony - CMS Wordpress - Zend
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2011
    Messages : 306
    Points : 101
    Points
    101
    Par défaut Conseils suivi...
    Merci pour ta réaction,

    C'est exactement ce que j'ai implementé après et cela fonction..

    en passant j'ai stuber mon parametre google
    pour qu'il retourne un promesse et l'ai ajouter au spec avec expect(...)

    merci pour la reponse clair je met le poste en resolu.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 04/07/2016, 10h52
  2. Test sur une fonction "incomplet" paraît-il
    Par Shirraz dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 8
    Dernier message: 18/04/2016, 15h04
  3. cas d'école : Requête combinée avec test sur une colonne
    Par teuzadur dans le forum Requêtes et SQL.
    Réponses: 12
    Dernier message: 23/06/2011, 14h14
  4. test sur une critere de requête
    Par patmar83 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 18/08/2008, 23h12
  5. Test sur une requète
    Par Thibaut_Dupont dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 27/07/2006, 13h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo