【发布时间】:2011-07-21 16:43:14
【问题描述】:
请帮忙。我正在尝试为我的模型中的方法编写单元测试。它一直给我以下错误:
{ 1) 错误:
test_Total_for_a_given_date_range_for_Campaigns(LetterTest):
TypeError:无法将 ActiveSupport::Duration 转换为字符串
c:/Users/Kay/rails-app/CS5942/app/models/letter.rb:19:in +'
c:/Users/Kay/rails-app/CS5942/app/models/letter.rb:19:intribe_total_on'
test/unit/letter_test.rb:17:in `block in '}
这是我的测试文件中的内容:
test "Total for a given date range for Campaigns" do
end_date = (Date.today + 1.day).to_date.strftime('%Y-%m-%d')
expected = Letter.where("letter_campaign_id = '1' and created_at between '#{ (Date.today - 1.day).to_date.strftime('%Y-%m-%d')}' and #{end_date}").count
data = Letter.tribe_total_on( 1 , (Date.today - 1.day).to_date.strftime('%Y-%m-%d') , (Date.today).to_date.strftime('%Y-%m-%d'))
assert_equal expected, data
end
加号好像有问题。如果我能找到解决方案,我会很高兴。谢谢。
这是tribe_total_on方法:
def self.tribe_total_on(tribe, start_date, end_date)
#Letter.connection.execute("SELECT COUNT(id) FROM letters WHERE letter_campaign_id = #{tribe} AND created_at BETWEEN '#{start_date.to_date.strftime('%Y-%m-%d')}' and '#{end_date.to_date.strftime('%Y-%m-%d')}'")[0][0]
end_date = end_date + 1.day #This is line 19 ...Had to include the one day to accomodate dates like 2011-06-05 01:02:03
Letter.where("letter_campaign_id = #{tribe} AND created_at between ? and ?", start_date.to_date, end_date.to_date).count
end
【问题讨论】:
-
它不是来自您的测试,而是来自您的 Letter 模型(如错误所示)。 letter.rb 的第 19 行是什么? (把整个tribe_total_on方法贴出来,指出哪一个是第19行)。
-
谢谢..已经贴出方法
标签: ruby-on-rails-3 unit-testing