Улучшение спецификации Jasmine для проверки свойств аргументов для вызовов - PullRequest
1 голос
/ 07 декабря 2011

Я использую следующий код Coffeescript для проверки того, что инициализация одного представления backbone.js создает другое:

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()

Это работает хорошо, но я не могу не думать, что это должно быть возможноулучшить это.Я представляю себе синтаксис, такой как:

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

... где toHaveBeenCalledMatching принимает функцию, которая принимает знак аргумента и возвращает truey, чтобы указать успех, и ложно в противном случае.

Кто-нибудь сталкивался с чем-то подобным, или мне нужно накатить свой здесь?Или у кого-нибудь есть лучшее предложение о том, как улучшить этот код?

1 Ответ

1 голос
/ 08 декабря 2011

Не работает ли toHaveBeenCalledWith () для вас? В большинстве случаев вы либо знаете значения заранее, либо можете рассчитать их.

Если вам действительно нужно использовать функцию для оценки аргументов для вызова, вы можете использовать отдельные ожидания и argsForCall для проверки каждого аргумента в отдельности.

Если худшее приходит к худшему, вы всегда можете написать свой собственный сопоставитель. Но это звучит намного сложнее, чем первые два:)

...