web-dev-qa-db-fra.com

Intégration du rapporteur avec Yeoman via Grunt

Je veux intégrer Protractor avec un échafaudage produit par Yeoman. J'ai suivi un tutoriel et là, le plus ancien scenario-runner a été utilisé pour configurer les tests e2e (via grunt).

Je voudrais mettre à niveau mon échafaudage et utiliser plutôt le rapporteur.
Des pensées?

41
user2733090
  1. Installez protractor et grunt-protractor-runner de npm:

    npm install protractor grunt-protractor-runner --save-dev
    
  2. Créez un fichier de configuration pour le rapporteur (protractor.conf.js), remplacez specs et baseUrl par vos fichiers de test et votre serveur de test:

    exports.config = {
      seleniumAddress: 'http://localhost:4444/wd/hub',
      specs: ['test/e2e/*_test.js'],
      baseUrl: 'http://localhost:9001' //default test port with Yeoman
    }
    
  3. Mettez à jour votre Gruntfile.js, ajoutez ce qui suit après la tâche de karma:

    protractor: {
      options: {
        keepAlive: true,
        configFile: "protractor.conf.js"
      },
      run: {}
    }
    
  4. Ajouter la tâche rapporteur en cours de test

    grunt.registerTask('test', [
      'clean:server',
      'concurrent:test',
      'autoprefixer',
      'connect:test',
      'karma',
      'protractor:run'
    ]);
    
  5. Téléchargez et démarrez le serveur Selenium:

    node_modules/protractor/bin/webdriver-manager update
    node_modules/protractor/bin/webdriver-manager start
    

    (Sous Windows :)

    node node_modules/protractor/bin/webdriver-manager update
    node node_modules/protractor/bin/webdriver-manager start
    
  6. Mettez à jour votre package.json, ajoutez ce qui suit après "devDependencies". Cela exécutera la commande après npm install pour que vous n'ayez pas besoin de vous souvenir à chaque fois.

    "scripts": {
      "install": "node node_modules/protractor/bin/webdriver-manager update"
    }
    
  7. Exécutez le test à l'aide de grunt

    grunt test
    

Si vous souhaitez que le rapporteur démarre le serveur pour vous, supprimez

seleniumAddress: 'http://localhost:4444/wd/hub',

de protractor.conf.js, puis en exécutant grunt test démarrera une instance Selenium autonome pendant le test et la quittera après avoir exécuté la suite de tests.

85
user2172816

Une chose à ajouter à la réponse existante; si vous souhaitez démarrer automatiquement le serveur Selenium, vous devez également spécifier l'emplacement de votre seleniumServerJar et chromeDriver (si vous utilisez Chrome), sinon les tests ne fonctionneront pas tant que vous n'aurez pas démarré manuellement le serveur Selenium (assurez-vous d'exécuter "webdriver- mise à jour du gestionnaire "à partir de la ligne de commande en premier):

protractor: {
        options: {
            keepAlive: false,
            configFile: "test/config/protractor.conf.js",
            noColor: true, // If true, protractor will not use colors in its output.

            args: {
                seleniumServerJar: 'node_modules/protractor/Selenium/selenium-server-standalone-2.39.0.jar',
                chromeDriver: 'node_modules/protractor/Selenium/chromedriver.exe'
            }
        },
        run: {

        }
    },
10
Always Learning

Comme @ user2172816 mentionne dans sa réponse - en laissant de côté seleniumAddress: 'http://localhost:4444/wd/hub' à partir de votre configuration de rapporteur fera généralement que Protractor démarrera une instance de sélénium pour vous.

Comme alternative, vous pouvez utiliser grunt-protractor-webdriver pour démarrer Selenium:

1) Installez et enregistrez grunt-protractor-webdriver

npm install grunt-protractor-webdriver --save-dev

2) Ajoutez les éléments suivants dans votre fonction de définition de Grunt:

grunt.loadNpmTasks('grunt-protractor-webdriver');

3) Ajoutez l'exemple de tâche de Webdriver rapporteur suivant:

protractor_webdriver: {
        start: {
            options: {
                path: 'node_modules/protractor/bin/',
                command: 'webdriver-manager start'
            }
        }
    }

4) Ajoutez protractor_webdriver à votre tâche test avant d'exécuter le rapporteur, par exemple.

grunt.registerTask('test', [
    'clean:server',
    'concurrent:test',
    'autoprefixer',
    'connect:test',
    'karma',
    'protractor_webdriver',
    'protractor:run'
]);
5
a darren