Führen Sie den asynchronen Code vor dem gesamten Mokka-Test aus

Ich suche nach einer Möglichkeit, vor dem gesamten Mokka-Test asynchronen Code auszuführen.

Hier ist ein Beispiel für einen Test, der eine Reihe von Argumenten und Erwartungen verwendet und alle Elemente in diesem Array durchläuft, um Funktionszusagen zu erstellen.

var assert = require('assert')

/* global describe, it*/

var fn = function (value) {
  return value + ' ' + 'pancake'
}

var tests = [
  {
    'arg': 'kitty',
    'expect': 'kitty pancake'
  },
  {
    'arg': 'doggy',
    'expect': 'doggy pancake'
  },
]

describe('example', function () {
  tests.forEach(function (test) {
    it('should return ' + test.expect, function (){
      var value = fn(test.arg)
      assert.equal(value, test.expect)
    })
  })
})

Nun, meine Frage ist, wie das funktionieren würde, wenn der Testwert aus einem Versprechen wie diesem stammt:

var assert = require('assert')
var Promise = require('bluebird')

/* global describe, it*/

var fn = function (value) {
  return value + ' ' + 'pancake'
}

function getTests () {
  return Promise.resolve('kitty pancake')
  .delay(500)
  .then(function (value) {
    return [
      {
        'arg': 'kitty',
        'expect': value
      },
      {
        'arg': 'doggy',
        'expect': 'doggy pancake'
      }
    ]
  })
}

getTests().then(function (tests) {
  describe('example', function () {
    tests.forEach(function (test) {
      it('should return ' + test.expect, function (){
        var value = fn(test.arg)
        assert.equal(value, test.expect)
      })
    })
  })  
})

versuchte auch:

describe('example', function () {
  getTests().then(function (tests) {
    tests.forEach(function (test) {
      it('should return ' + test.expect, function (){
        var value = fn(test.arg)
        assert.equal(value, test.expect)
      })
    })
  })
})

In diesem Beispiel wird jedoch keiner der Tests ausgeführt, da mocha die describe-Anweisung nicht erkennt, da sie innerhalb eines Versprechens liegt.

before / beforeEach wird sowieso nichts tun, um bei einem Test im Format zu helfen, es sei denn, das war einbeforeTest Hook, der Mokka mit dem Wissen versorgt, dass es eine asynchrone Operation gibt, die vor dem gesamten Test ausgeführt werden muss.

Antworten auf die Frage(8)

Ihre Antwort auf die Frage