【发布时间】:2012-04-05 18:11:07
【问题描述】:
我在 Rails 中有一个导入控制器,可以将多个包含多条记录的 csv 文件导入我的数据库。如果记录实际上是使用 RSpec 保存的,我想在 RSpec 中测试:
<Model>.any_instance.should_receive(:save).at_least(:once)
但是我收到错误消息:
The message 'save' was received by <model instance> but has already been received by <another model instance>
一个人为的控制器示例:
rows = CSV.parse(uploaded_file.tempfile, col_sep: "|")
ActiveRecord::Base.transaction do
rows.each do |row|
mutation = Mutation.new
row.each_with_index do |value, index|
Mutation.send("#{attribute_order[index]}=", value)
end
mutation.save
end
是否可以使用 RSpec 对此进行测试,或者是否有任何解决方法?
【问题讨论】:
-
您使用的是哪个版本的 RSpec,您看到的失败消息是什么?
-
rspec (2.8.0) 并且消息是:消息“保存”已由 接收,但已被 接收
-
这是预期的行为。 any_instance 的要点是不必知道哪个单个实例正在期待某事,但它仍然将其限制为一个实例。
-
这是预期的行为 - 授予 - 但如果你想测试它不是很有用。而且似乎没有任何其他方法,例如“many_instances”可以放松一个实例的约束。
标签: ruby-on-rails testing rspec mocking mocha.js