J'ai une ligne très simple dans un test qui appelle un script d'exécution comme celui-ci:
puts page.execute_script("return somefunction();").to_i.inspect
Et en javascript j'ai une fonction comme celle-ci:
function somefunction(){
console.log("test");
return 999;
}
Le "test" du journal de la console se déconnecte donc il est en cours d'exécution cependant ...
En regardant les journaux lors de l'exécution du test, le execute_script renvoie 0 et non 999, donc dans rspec, je ne peux pas obtenir la valeur de retour de la fonction, comment faire pour que page.execute_script renvoie cette valeur de cette fonction?
Le pilote Poltergeist est conçu pour retourner nil pour execute_script
:
def execute_script(script)
browser.execute(script)
nil
end
Poltergeist ne renverra une valeur que si vous utilisez evaluate_script
:
def evaluate_script(script)
browser.evaluate(script)
end
Capybara a des méthodes correspondantes pour chacun - c'est-à-dire Session#execute_script
et Session#evaluate_script
. Votre code devrait fonctionner si vous passez à l'utilisation de evaluate_script
(et comme le souligne @AndreyBotalov, vous devez également supprimer le return
):
puts page.evaluate_script("somefunction();").to_i.inspect