fonction d'appel coffeescript à l'intérieur jQuery document.ready
-
26-10-2019 - |
Question
Jasmine Test:
describe 'Toolbar', ->
beforeEach ->
jasmine.getFixtures().fixturesPath = "../spec/javascript/fixtures"
loadFixtures("canvas_fixture.html")
describe 'Rectangle Button Click', ->
it 'adds the selected class to rectangle button', ->
toolbar = new Toolbar()
expect(toolbar).toBeDefined
console.log $('#rectangle')
toolbar.rectangle
expect($('#rectangle').hasClass("selected")).toBeTruthy()
console.log $('#rectangle')
Classe:
class window.Toolbar
jQuery ->
rectangle: $('#rectangle').click ->
$('#toolbar button').removeClass("selected")
$('#rectangle').addClass("selected")
Ce test échoue pour moi que la classe sélectionnée n'est pas ajouté à l'appareil, et je pense que je ne suis pas d'appeler la fonction correctement. Comment dois-je appeler le
fonction$ ( '# rectangle). Cliquez sur
dans mon test? Merci.
La solution
Je ne sais pas tout le contexte, mais certaines choses que je vois:
-
toolbar.rectangle
dans votre test ne demande pas une fonction, vous devez diretoolbar.rectangle()
appeler réellement -
Votre classe écrit ne définit pas une méthode sur la classe barre d'outils, vous devriez écrire quelque chose comme ceci:
class Toolbar rectangle: -> $('#rectangle').click -> $('#toolbar button').removeClass("selected") $('#rectangle').addClass("selected")
-
Lorsque vous écrivez ce
$('#rectangle').click -> ...
, vous définissez un gestionnaire d'événement qui sera appelé lorsque vous cliquez dans#rectangle
. Si vous voulez avoir-il agir immédiatement (à savoir lorsque vous appeleztoolbar.rectangle()
, vous avez besoin quelque chose comme ceci:class Toolbar rectangle: -> $('#toolbar button').removeClass("selected") $('#rectangle').addClass("selected")
Bien sûr, vous devez vous assurer que tout cela se passe après la page se charge correctement, pas familier avec Jasmine de dire si cela se produira.
Hope this helps.