我的这项工作要求我进行2次测试,我有这段代码要使用test-unit进行单元测试,但是我不知道该怎么做。有什么方法可以检查在测试环境中返回的数据吗?
def get_aspley_data
url = "https://www.domain.com.au/rent/aspley-qld-4034/?price=0-900"
unparsed_page = HTTParty.get(url)
parsed_page = Nokogiri::HTML(unparsed_page)
house_listings_data = []
house_listings = parsed_page.css('.listing-result__details')
house_listings.each do |hl|
prop_type = hl.css('.listing-result__property-type')[0]
price = hl.css('.listing-result__price')[0]
suburb_address = hl.css('span[itemprop=streetAddress]')[0]
house_array = [house_listings]
house_array.push("#{prop_type} #{price}")
house_listings_data << [prop_type, price, suburb_address]
puts [prop_type, price, suburb_address].to_csv(col_sep: "|")
end
File.open($aspley_file, "ab") do |f|
data = house_listings_data.map{ |d| d.to_csv(col_sep: "|") }.join
f.write(data)
end
end```
您的功能仅需要一条网络信息unparsed_page = HTTParty.get(url)
。如果我们从获取页面中获取extract the parsing and saving of the page,则所有内容都可以通过常规方式进行测试。
def parse_aspley_page(unparsed_page)
parsed_page = Nokogiri::HTML(unparsed_page)
house_listings_data = []
house_listings = parsed_page.css('.listing-result__details')
house_listings.each do |hl|
prop_type = hl.css('.listing-result__property-type')[0]
price = hl.css('.listing-result__price')[0]
suburb_address = hl.css('span[itemprop=streetAddress]')[0]
house_array = [house_listings]
house_array.push("#{prop_type} #{price}")
house_listings_data << [prop_type, price, suburb_address]
puts [prop_type, price, suburb_address].to_csv(col_sep: "|")
end
return house_listings_data
end
def save_house_listings(house_listings, file:)
File.open(file, "ab") do |f|
data = house_listings.map{ |d| d.to_csv(col_sep: "|") }.join
f.write(data)
end
end
def get_aspley_data(url, file: $aspley_file)
save_house_listings(
parse_aspley_page(HTTParty.get(url))
)
end
现在parse_aspley_page
和save_house_listings
可以正常进行单元测试了。
注意,我已更改save_house_listings
以将要写入的文件作为参数。这将使测试更容易,您可以告诉它写入临时文件,并且通常更灵活。
get_aspley_data
现在是两个采用URL的经过单元测试的函数的瘦包装。它只需要集成测试。它还将要写入的文件作为参数,默认为$aspley_file
。要测试它,请模拟HTTParty.get
返回一个页面,并告诉它写入一个临时文件。
或者,您可以设置一个小型HTTP服务器进行测试。但是我发现将您的代码进行重构以进行单元测试,从而可以进行更简单的测试和更灵活的设计。
由于这是一项作业,您应该与老师核实他们希望您如何解决它。