Comment est-ce que je peux mocker le tri d'un tableau attendez-vous à une expression de lambda?Mocking Sort With Mocha
Ceci est un exemple trivial de mon problème:
# initializing the data
l = lambda { |a,b| a <=> b }
array = [ 1, 2, 3, 4, 5 ]
sorted_array = [ 2, 3, 8, 9, 1]
# I expect that sort will be called using the lambda as a parameter
array.expects(:sort).with(l).returns(sorted_array)
# perform the sort using the lambda expression
temp = array.sort{|a,b| l.call(a,b) }
Maintenant, au début, je pensais que cela fonctionnerait; cependant, j'ai l'erreur suivante:
- expected exactly once, not yet invoked: [ 1, 2, 3, 4, 5 ].sort(#<Proc:0xb665eb48>)
Je réalise que ceci ne fonctionnera pas parce que l n'est pas passé en paramètre à l. Cependant, y a-t-il une autre façon de faire ce que ce code essaie d'accomplir?
NOTE: J'ai trouvé comment résoudre mon problème sans comprendre comment faire ce qui précède. Je vais laisser cela ouvert juste au cas où quelqu'un d'autre a un problème similaire.
Cheers, Joseph
Salut Joseph, je suis bryan. Je soupçonne que le problème pourrait être causé par "with (l)". Avec la façon dont vous l'utilisez, ne devrait pas être appelé avec un «l»? – Shuo
Hey Bryan, Cela a du sens. Au début, j'ai supposé que si vous fournissiez un bloc de code à .sort, il passerait l pour trier. Alors maintenant je cherche une autre façon de faire ce que le code ci-dessus essaie de faire. J'ai modifié le message pour inclure spécifiquement cette demande. – user175750
Je vois, vous l'avez déjà fait remarquer dans votre question initiale. :) J'utilise une machine où le rubis n'est pas installé. Regardera ce problème plus tard. Bonne chance. – Shuo