Sinonjs Не удается прочитать свойство 'quoteStrings' неопределенного

Синон выдает мне забавную ошибку:

TypeError: Cannot read property 'quoteStrings' of undefined
    at ascii (http://localhost:3500/assets/sinon.js?body=1:164:36)
    at Function.array (http://localhost:3500/assets/sinon.js?body=1:207:25)
    at Object.ascii (http://localhost:3500/assets/sinon.js?body=1:179:26)
    at Object.format (http://localhost:3500/assets/sinon.js?body=1:594:36)
    at Object.<anonymous> (http://localhost:3500/assets/sinon.js?body=1:1065:43)
    at Function.toString (http://localhost:3500/assets/sinon.js?body=1:1744:54)
    at Function.verify (http://localhost:3500/assets/sinon.js?body=1:1761:49)
    at Context.<anonymous> (http://localhost:3500/assets/views/myview_spec.js?body=1:29:21)
    at Test.run (http://localhost:3500/assets/mocha.js:3322:32)
    at Runner.runTest (http://localhost:3500/assets/mocha.js:3630:10)

Вот тест, который вызывает это:

    beforeEach ->
      # make a fake collection object
      collection =
        each: ->


      @subject = new App.Views.TaskList collection: collection
      @sandbox = sinon.sandbox.create()

    it 'renders each task in the collection', ->

      task = ['task model']
      @sandbox.stub(@subject.collection, 'each').yields task

      mock = @sandbox.mock(@subject).expects('renderTask')
                                    .withExactArgs(task, skipLayout: true)
      @subject.render()
      mock.verify()

И тестируемый код:

 render: =>
    @collection.each (task) =>
      @renderTask task

    this

ОБНОВИТЬ:

Оказывается, когда я обновляю код для прохождения теста, я не получаю ошибку:

 render: =>
    @collection.each (task) =>
      @renderTask task, skipLayout: true

    this

Так что это должно быть как-то связано с ошибкой ожидания sinon.js. Вероятно, ошибка sinon.js.


person Christian Schlensker    schedule 08.07.2012    source источник


Ответы (1)


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

mock = @sandbox.stub collection, 'renderTask'

@subject.render()

mock.callCount.should.equal 1
mock.calledWith.should.equal task, skipLayOut: true

Некрасиво, но это работает. Точный синтаксис для утверждений будет отличаться в зависимости от вашего фреймворка; Я использую chai в примере.

person Tanzeeb Khalili    schedule 17.07.2012
comment
Это был и мой вывод. Насмешки sinon добавляют более приятный вывод об ошибках, но как только вы получите более одного примера, они в конечном итоге принесут больше проблем, чем пользы. Что привело меня к использованию подхода заглушки + callCount. - person Christian Schlensker; 17.07.2012