Je suis nouveau sur coffeescript et j'essaie de créer une bibliothèque pour ajouter du sucre syntaxique à la fois pour cofffeescript et javascript. Il utilise beaucoup de décorateurs, donc je suis surpris que ce test échoue:Pourquoi shouldjs dit que les deux objets ne sont pas les mêmes?
it 'sandbox',() ->
id = (x) -> x
fn = (y) -> y == 1
f = id fn
should(f).be.equal(fn)
should(f 3).be.false()
Ce que je pense que je fais:
- créer la fonction
id
qui retourne son premier argument. - créer la fonction
fn
qui renvoie true ssi son premier argument est1
- appliquent
id
surfn
. Je m'attends à ce que le résultatf
soit exactement le même (référence sage!) Quefn
.
should.js dit que mon résultat f
est même pas une fonction:
1) Function guard predicate #bakeFunctionPredicate sandbox:
TypeError: object is not a function
at Context.<anonymous> (/Users/luftzug/private/jspatterns/test/patterns.test.coffee:31:7)
at Test.Runnable.run (/Users/luftzug/private/jspatterns/node_modules/grunt-mocha-cli/node_modules/mocha/lib/runnable.js:221:32)
at Runner.runTest (/Users/luftzug/private/jspatterns/node_modules/grunt-mocha-cli/node_modules/mocha/lib/runner.js:378:10)
at /Users/luftzug/private/jspatterns/node_modules/grunt-mocha-cli/node_modules/mocha/lib/runner.js:456:12
at next (/Users/luftzug/private/jspatterns/node_modules/grunt-mocha-cli/node_modules/mocha/lib/runner.js:303:14)
at /Users/luftzug/private/jspatterns/node_modules/grunt-mocha-cli/node_modules/mocha/lib/runner.js:313:7
at next (/Users/luftzug/private/jspatterns/node_modules/grunt-mocha-cli/node_modules/mocha/lib/runner.js:251:23)
at Immediate._onImmediate (/Users/luftzug/private/jspatterns/node_modules/grunt-mocha-cli/node_modules/mocha/lib/runner.js:280:5)
at processImmediate [as _immediateCallback] (timers.js:367:17)
Je suis très confus. Est-ce shouldjs
qui fait quelque chose d'inattendu, ou coffeescript n'est pas traduit dans le code que je m'attends à traduire?
Êtes-vous sûr que le problème est avec 'f'? La documentation de [should.js] (https://github.com/shouldjs/should.js/wiki/Breaking-changes) note que 'be.false' a été changé en' be.false() 'dans la version 7. Peut-être que vous utilisez-vous toujours une version plus ancienne? – andersschuller
@andersschuller Il échoue sur la ligne avant cela, donc non, ce n'est pas le problème (mais pourrait être un problème, qui sait). – Luftzig