2010-05-18 55 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