【发布时间】:2015-09-12 00:27:13
【问题描述】:
在收入模型中添加自定义验证后,我的测试出现了一些问题。
@member.incomes << [Income.new(starting_date: '2015-01-01', amount: 1200, member: @member),
Income.new(starting_date: '2015-04-01', amount: 1400, member: @member)]
我收到以下错误:wrong number of arguments (1 for 0)
我对@987654323@的观察:
第一条记录已正确插入,但第二条记录出错。
我做错了什么 - 知道吗?
更新:
concat 方法在这里无济于事。
更多代码:
income.rb
validate :newly_added_income_is_also_the_newest?
....
..
def newly_added_income_is_also_the_newest?
latest_income = Income.where(member: member_id).select{|i|i}.max(&:starting_date)
return true if latest_income.nil?
if !latest_income.nil? && latest_income.starting_date >= starting_date
errors.add(:income, "newest income should be also the latest income of the member '#{member.full_name}''")
end
end
test: [Budget] 应该得到所有介于 start_date 和 end_date 之间的收入
@member.incomes.concat[Income.new(starting_date: '2015-01-01', amount: 1200, member: @member),
Income.new(starting_date: '2015-04-01', amount: 1400, member: @member)]
budget = FactoryGirl.create(:budget, donation: @donation, member: @member)
expect(budget.get_all_incomes_for_budget_duration.size).to eq(3)
log1
1) Budget Tests with a budget based donation types [Budget] should get all incomes which are in between of the start_date and end_date
Failure/Error: @member.incomes.concat[Income.new(starting_date: '2015-01-01', amount: 1200, member: @member),
TypeError:
no implicit conversion of Income into Integer
# ./spec/models/budget_spec.rb:44:in `[]'
# ./spec/models/budget_spec.rb:44:in `block (3 levels) in <top (required)>'
test2:[Budget] 应该在预算范围 (FAILED - 2) 之间获得调整后的收入变化承诺
it '[Budget] should get an adapted promise for income change between the budget range', skip_before: true do
Member.delete_all
Donation.delete_all
member = FactoryGirl.create(:member)
donation = FactoryGirl.create(:majlis_khuddam_donation)
#income = FactoryGirl.create(:income, member: member)
member.incomes << Income.new(starting_date: '2015-01-01', amount: 1200, member_id: 12345) <<
Income.new(starting_date: '2015-03-01', amount: 1000, member_id: 12345)
budget = FactoryGirl.create(:budget, donation: donation, member: member)
expect(budget.promise).to eq(123)
end
log2
2) Budget Tests with a budget based donation types [Budget] should get an adapted promise for income change between the budget range
Failure/Error: Income.new(starting_date: '2015-03-01', amount: 1000, member_id: 12345)
ArgumentError:
wrong number of arguments (1 for 0)
# /Users/user/.rvm/gems/ruby-2.2.0@maalify/gems/activerecord-4.2.0/lib/active_record/attribute_methods.rb:48:in `__temp__374716274796e676f546164756'
# ./app/models/income.rb:22:in `each'
# ./app/models/income.rb:22:in `max'
# ./app/models/income.rb:22:in `newly_added_income_is_also_the_newest?'
【问题讨论】:
-
@member.incomes << Income.new(...) << Income.new(...)不会解决问题吗?无论如何,请发布整个错误消息,尤其是方法名称。 -
您需要显示引发错误的方法。
标签: ruby-on-rails ruby exception rspec