web-dev-qa-db-fra.com

Global «avant» et «avant chaque» pour le moka?

J'utilise mocha pour les tests unitaires javascript maintenant.

J'ai plusieurs fichiers de test, chaque fichier a un before et beforeEach, mais ils sont exactement les mêmes.

Comment puis-je fournir un before et beforeEach global pour tous (ou certains)?

61
Freewind

Déclarez un before ou beforeEach dans un fichier séparé (j'utilise spec_helper.coffee) et l'exigent.

spec_helper.coffee

afterEach (done) ->
  async.parallel [
    (cb) -> Listing.remove {}, cb
    (cb) -> Server.remove {}, cb
  ], ->
    done()

test_something.coffee

require './spec_helper'
27
Michelle Tilley

À la racine du dossier de test, créez un assistant de test global test/helper.js qui a votre avant et chaque avant

// globals
global.assert = require('assert');

// setup
before();
beforeEach();

// teardown
after();
afterEach();
77
AJcodez

de la documentation mocha

CROCHETS AU NIVEAU DES RACINES

Vous pouvez également sélectionner n'importe quel fichier et ajouter des crochets de niveau "racine". Par exemple, ajoutez beforeEach () en dehors de tous les blocs describe (). Cela entraînera le rappel à beforeEach () avant tout scénario de test, quel que soit le fichier dans lequel il se trouve (c'est parce que Mocha a un bloc describe () implicite, appelé la "suite racine"

Toutes les suites régulières de describe()- sont d'abord collectées et seulement alors exécutées, cela garantit que cela sera appelé en premier.

'use strict'
let run = false

beforeEach(function() {
    if ( run === true ) return
    console.log('GLOBAL ############################')
    run = true
});

Supprimez le run-flag, si vous voulez le voir s'exécuter à chaque fois, avant chaque test.

J'ai nommé ce fichier test/_beforeAll.test.js. Il n'a pas besoin d'être importé/requis n'importe où, mais le .test. (Resp. .spec.) Dans le nom de fichier est important, afin que votre testrunner le ramasse…


piste bonus 8-): en utilisant mocha.opts\o /

S'il y a des choses, vous ne voulez vraiment configurer qu'une seule fois avant d'exécuter vos tests (quels que soient ceux ...), mocha.opts Est une option étonnamment élégante! - Ajoutez simplement un require à votre fichier (oui, même s'il contribue peu au moka, mais plutôt à votre configuration de test). Il fonctionnera de manière fiable une fois avant:

enter image description here

(dans cet exemple, je détecte si un seul test ou plusieurs tests sont sur le point de s'exécuter. Dans le premier cas, je génère chaque log.info(), tandis que sur un cycle complet, je réduis la verbosité à error + warn ...)

Mise à jour:

Si quelqu'un connaît un moyen, pour accéder à certaines propriétés de base de la suite mocha qui est sur le point d'être exécutée dans once.js, J'aimerais savoir et ajouter ici. (c'est-à-dire que ma détection de suiteMode- est moche, s'il y avait une autre façon de détecter, combien de tests doivent être exécutés…)

27
Frank Nocke