2012-12-06 81 views
2

我想用CasperJS測試一個頁面,特別是我想捅一堆數據模型。假設我有一個基本功能叫稅,我想確保它使用正確的稅率。所以我喜歡這樣的東西:直接從CasperJS調用JS方法

this.test.assert(taxes(100, 'Ontario') === 15, "Check ontario tax rate"); 

而不是填寫表格並看到它打印什麼。 taxes方法存在於全局範圍內,所以我可以很容易地從任何地方執行它(包括從Firebug或Chrome中的控制檯)。但它不是在爲正確的範圍裏面CasperJS工作(我覺得我越來越ReferenceError: Can't find variable: taxes

好像我失去了一些東西簡單

TL; DR:?我如何執行?直接在CasperJS測試中JS的對網頁位

回答

6

您是否嘗試過使用evaluate()

相關報價:「因爲如果你使用的瀏覽器中執行代碼控制檯「

東西沿着線:

casper.evaluate(function(amount, province) { 

    return taxes(amount, province); 

}, {100, 'Ontario'}); 
+0

謝謝,我錯過了那個註釋,我想我在頁面上使用「範圍」作爲關鍵字搜索,並且什麼都沒有提出。 – preinheimer

0

使用assertEvalEquals()方法

+0

雖然這理論上確實回答了問題,但如果鏈接斷開 - 這個答案的上下文也是如此。你能否在這個答案中顯示_how_使用該方法,所以即使鏈接無法解析,它仍然有用?否則可能會被刪除。 –

0

如果您是通過jQuery的樣式的引用調用方法,一定要明確包括圖書館,免得你會得到的ReferenceError:

var casper = require('casper').create({ 
    clientScripts: ['js/jquery-1.7.2.js'] 
}); 

...

casper.start('foo.php', 
    function() { 
     console.log(this.evaluate(function() { 
     return $('taxes').text(); 
     })); 
    }); 

casper.run(); 

參見:https://groups.google.com/forum/#!msg/casperjs/2uyUOqdzShw/bHWrJYXni40J

如果您在全局範圍中隱式調用它(即,直接使用javascript,而不是例如$('taxes')),則可能必須將窗口或文檔命名空間顯式預先添加到引用:

document.querySelector('#taxes').value = taxes_text;