2010-05-18 57 views
2

時,我一直在試圖用摩卡做一些磕碰,使用機械化的代碼測試。下面是一個例子方法:打樁測試使用Ruby機械化

def lookup_course subject_area = nil, course = nil, quarter = nil, year = nil 
    raise ArgumentError, "Subject Area can not be nil" if (subject_area.nil? || subject_area.empty?) 
    page = get_page FIND_BASIC_COURSES 
    raise ArgumentError, "Invalid Subject Area" unless page.body.include?(subject_area.upcase) 
    form = page.form_with(:action => 'BasicFindCourses.aspx') 
    if !quarter.nil? && !quarter.empty? && QUARTERS.has_key?(quarter.downcase) && year.is_a?(Integer) 
     form['ctl00$pageContent$quarterDropDown'] = "#{Time.now.year}#{QUARTERS[quarter]}" 
     puts form['ctl00$pageContent$quarterDropDown'] 
    end 
    form['ctl00$pageContent$subjectAreaDropDown'] = subject_area 
    form['ctl00$pageContent$courseNumberTextBox'] = course if (!course.nil? && !course.empty?) 
    result = form.submit(form.button_with(:name => 'ctl00$pageContent$searchButton')) 
    result.body.downcase.include?(subject_area.downcase) ? result : false 
    end 

所以get_page方法將返回一個機械化::頁面與解析HTML和所有的好東西。如果有人知道一種方式來接受這個對象並做一些序列化操作(但是,由於Mechanize :: Page的子模塊之一不能理解如何從編組中轉儲,序列化不起作用物體)。我一直有做,顯然是由於我缺乏存根的理解,就是:

should "return a mechanize page with valid course subject" do 
    Mechanize::Page.stubs(:body).returns(FIND_COURSE_HTML) 
    Mechanize::Page.stubs(:form_with).returns(message = {}) 
    Mechanize::Form.stubs(:submit).returns(true) 

    assert_equal Mechanize::Page, @access.lookup_course("CMPSC").class 
end 

上面的代碼是一個工作在進步,因爲我是這樣做,我意識到,必須有做一個更好的方法,希望你們中有一個聰明的人已經完成了這種類型的事情。我不想留下每一個功能。理想情況下,我希望能夠使用html創建一個Mechanize :: Page對象(因爲我將知道這些頁面上的html是什麼......並且這將是我認爲的一個很好的存根)。無論如何,我無法弄清楚如何用html實例化一個Mechanize :: Page。

任何人都可以指導我更好的方向發展,以測試像lookup_course的方法是使用大量的功能件。也許我應該分手的邏輯在我的代碼,使這更好​​的(如果是的話,你會如何建議?)

謝謝您的時間,

邁克爾

+0

一種解決方案是設計使用左右機械化一個瘦接口...我已經創建了自己的GET和POST方法是包裝機械化GET/POST,這樣我可以有我的代碼儘可能與機械化分離。仍然感興趣的是看看是否有其他方式的測試Mechanize for Ruby ......感謝您的觀看。 – Mike 2010-05-27 21:45:14

回答

0

你可以看看這個Stakoverflow questions其中建議使用Fakeweb。另一個值得檢查的是Webmock。我曾經用來規避磕碰機械化本身的混亂

+0

只是一個說明:Webmock還不支持Mechanzie。 – 2013-11-24 12:06:32