Amélioration d'une spécification de jasmin pour tester les propriétés des arguments aux appels

StackOverflow https://stackoverflow.com/questions/8407660

  •  29-10-2019
  •  | 
  •  

Question

J'utilise le code CoffeeScript suivant pour valider cette initialisation d'un squelette.js View construit une autre:

describe 'Avia.AviaView', ->

  beforeEach ->
    @aviaView = new Avia.AviaView(addFixtureDiv('avia'))
    @matricesView = new Backbone.View()

    spyOn(Avia, 'MatricesView').andCallFake(
      (element) =>
        if !element
          throw "Expected MatricesView to be constructed with a parent element"
        else if element.attr('id') != 'tabs-3'
          throw "Expected MatricesView to be constructed with the parent element #tabs-3"
        else
          @matricesView
    )

  describe 'initialize', ->

    beforeEach ->
      @aviaView.initialize()

    it 'creates a new MatricesView ', ->
      expect(Avia.MatricesView).toHaveBeenCalledOnce()

Cela fonctionne bien, mais je ne peux pas m'empêcher de penser qu'il devrait être possible de l'améliorer. J'imagine une syntaxe comme:

it 'creates a new MatricesView ', ->
  expect(Avia.MatricesView).toHaveBeenCalledMatching((args...) => args[0].attr('id') == 'tabs-3')

... où toHaveBeenCalledMatching Prend une fonction qui prend un splat des arguments et renvoie la vérité pour indiquer le succès, et la falsification autrement.

Quelqu'un a-t-il rencontré quelque chose comme ça, ou dois-je rouler le mien ici? Ou, quelqu'un a-t-il une meilleure suggestion de la façon d'améliorer ce code?

Était-ce utile?

La solution

Fait tohaveeencalledWith () Vous ne travaillez pas pour vous? Dans la plupart des cas, vous connaissez les valeurs à l'avance, soit les calculer.

Si vous avez vraiment besoin d'utiliser une fonction pour évaluer les args pour l'appel, vous pouvez utiliser des attentes distinctes et argsforcall pour tester chaque arg individuellement.

Si le pire arrive au pire, vous pouvez toujours écrire votre propre correspondant. Mais cela semble beaucoup plus difficile que les deux premiers :)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top