Pourquoi est-ce sinon espion de ne pas être appelé lorsque j'exécute ce test?

J'ai une épine Dorsale Modèle:

class DateTimeSelector extends Backbone.Model

  initialize: ->
    @bind 'change:date', @updateDatetime
    @bind 'change:time', @updateDatetime

  updateDatetime: =>
    # do some stuff with the sate and time

Et j'ai quelques tests pour que le code à l'aide jasmin et sinon.js

describe "DateTimeSelector", ->
  beforeEach ->
    @datetime = new DateTimeSelector()

    describe "updateDatetime", ->
      beforeEach ->
        @updateSpy = sinon.spy(@datetime, 'updateDatetime')

      afterEach ->
        @datetime.updateDatetime.restore()

      # passes
      it "should be called when we call it", ->
        @datetime.updateDatetime()
        expect(@updateSpy).toHaveBeenCalledOnce()

      # fails
      it "should be called when we trigger it", ->
        @datetime.trigger 'change:date'
        expect(@updateSpy).toHaveBeenCalled()

      # fails
      it "should be called when we set the date", ->
        @datetime.set { date: new Date() }
        expect(@updateSpy).toHaveBeenCalled()

Il semble que cela fonctionne lorsque je l'utilise dans le navigateur, mais je n'arrive pas à faire passer les tests. Quelqu'un peut-il m'éclairer?

  • Vous pouvez modifier le balisage d'inclure coffeescript. J'aurais ajouté pour vous, mais vous êtes au maximum à 5 et je ne voulais pas prendre la décision de les remplacer pour vous.
  • Ouais, je ne sais jamais quoi faire dans cette situation. La question qui est écrit dans le Café, bien sûr, mais le problème et la solution sont (probablement) pas coffeescript liés. Donc je ne sais pas si c'est correct de balise comme coffeescript.
  • J'ai bien regardé à cette question, car il a été marqué JS, mais je suis incapable de l'aider parce que l'exemple est coffeescript je n'utilise pas moi-même. Alors j'ai pensé à un coffeescript balise peut attirer d'autres coffeescript utilisateurs, qui pourraient plus facilement lire et comprendre votre exemple. 🙂
  • Il semble que vous tester quelque chose de mal ici. Dans la plupart des cas, il n'est pas une bonne idée d'espionner la classe que vous souhaitez tester. Dans votre cas, il faut tester si le résultat de @updateDatetime est celui que vous attendiez, pas si ça s'appelle, parce que c'est la fonctionnalité que vous obtenez à partir de la dorsale et vous devez avoir confiance en eux qu'ils se tester leurs trucs.
InformationsquelleAutor David Tuite | 2011-12-09