[英]Asynchronous Unit Tests in Ruby
我正在測試一些使用ruby's 和諧建立的javascript庫。 除AJAX調用外,其他所有功能均正常運行-是否有人對如何實現此目標有任何想法?
我的代碼看起來像這樣(我正在使用RightJS ):
my.js
function makerequest(argument) {
new Xhr('http://mysite.com/some/jsonp'),{
jsonp: true,
params: {something: argument},
onSuccess: function() {
// Calls a function defined outside my library
parse_response(this.json)
}
}).send()
}
test_makerequest.rb
require 'rubygems'
require 'harmony'
require 'test/unit'
require 'shoulda'
class RequestTest < Test::Unit::TestCase
context "The requesty thing" do
setup do
@page = Harmony::Page.new
@page.load(File.expand_path('js/my.js'))
end
should "get stuff from mysite.com" do
# Here I need to define a 'parse_response' which this
# should section will wait for and then do an 'assert'
# on the results.
results = callback_to_get_results_from__make_request
@page.execute('make_request("an argument")')
assert results == {'foo' => 'bar'}
end
end
end
所以,是的,我的問題是,我應該怎么分配results
上面,這樣我可以得到異步回調的結果嗎?
異步調用通常在JS單元測試中會出現問題。 過去,通過阻塞主線程直到XHR調用成功,使XHR調用有效地同步,從而解決了該問題。 如何執行此操作取決於您的框架,並且我對Harmony和RightJS不熟悉。 但是,邏輯看起來像這樣:
true
;當沒有XHR進行中時,鎖定將為false
。 這種方法的目的是避免修改您的代碼,這會使您的測試無效。 不幸的是,這也意味着您無法測試返回值本身,但是我認為這將是任何不修改代碼的策略的警告。
另一種方法是實際異步運行測試,即 使用AOP將您的斷言附加到onSuccess回調。 但是,許多測試套件不能很好地與異步測試配合使用,因為一個測試的設置可能在上一個測試的拆除之前開始(即,因為前一個測試仍在等待異步調用返回)。
最后一種方法是模擬所有異步調用。 就是 只需覆蓋XHR並讓您的測試斷言已使用正確的參數調用了它。 如果我的集成測試確實通過了整個異步堆棧,那么我可能會喜歡這種方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.