【问题标题】:Rails test involving an object that requires an api update涉及需要更新 api 的对象的 Rails 测试
【发布时间】:2011-08-03 11:03:03
【问题描述】:
我正在尝试获取一个 Bill 对象来执行测试。这是一项美国国会法案,我通过 rsync 在数据目录中的 xml 中拥有该法案。我的代码采用账单名称,例如“h1.xml”,解析 xml,然后从 www.govtrack.us 获取账单的全文。所以,在我的主应用中,创建一个账单
- 获取账单名称(例如 h1)(通过方法 def self.update_from_directory 中的通配符)
def self.update_from_directory
Dir.glob("#{Rails.root}/data/bills/small_set/*.xml").each 做 |bill_path|
bill_name = bill_path.match(/.*\/(.*).xml$/)[1]
b = Bill.find_or_create_by(:govtrack_name => bill_name)
b.update_bill
b.保存!
结尾
结尾
def update_bill
file_data = File.new("#{Rails.root}/data/bills/#{self.govtrack_name}.xml", 'r')
bill = Feedzirra::Parser::GovTrackBill.parse(file_data)
if bill && (self.introduced_date.nil?|| (bill.introduced_date.to_date > self.introduced_date))
self.congress = bill.congress
self.bill_type = bill.bill_type
self.bill_number = bill.bill_number
... 等等 。 . .直到:
get_bill_text
def get_bill_text
bill_object = HTTParty.get("#{GOVTRACK_URL}data/us/bills.text/#{self.congress.to_s}/#{self.bill_type}/#{self.bill_type + self.bill_number.to_s}.html" )
self.bill_html = bill_object.response.body
self.text_updated_on = Date.today
Rails.logger.info "更新了 #{self.ident} 的账单文本"
结尾
我的目标很简单,我想模拟整个账单进行测试:
默认设置
@my_test_bill = Bill.new(:govtrack_id => "h1")
@my_test_bill.update_bill
结尾
我正在尝试让 webmock 和 vcr 工作,但我能找到的所有示例都提供了一种模拟特定调用的方法,我不想重新输入一个全新的 update_bill 方法。
任何想法都非常感谢。
提姆
【问题讨论】:
标签:
ruby-on-rails
unit-testing
testing
mocking