0

这是我的第一个问题,如果我遗漏了什么,请原谅我。

lib我在我的目录中的 Rails 3.2 应用程序中编写了一个类。然后,我的lib/tasks目录中有一个需要该lib文件的 rake 任务,实例化该类(让我们称之为它MailchimpExporter)并在该类上执行一个export_all方法。

该类已经过全面测试,但我还想为 rake 任务编写一个测试,以确保在export_all调用任务时针对该类调用该类。

我从以下内容开始:

规范/lib/tasks/export_to_mailchimp_spec.rb

it 'should export to all lists' do
  MailchimpExporter.any_instance.stub(:export_all)

  Rake::Task[:export_to_mailchimp].invoke

  expect(MailchimpExporter.any_instance).to have_received(:export_all)
end

但是同时调用#any_instance设置和断言都会引发错误。我改为将其更改为以下内容,使其运行,尽管可能不是最好的代码:

it 'should export to all lists' do
  chimpy = MailchimpExporter.new
  MailchimpExporter.stub(:new).and_return(chimpy)
  chimpy.stub(:export_all)

  Rake::Task[:export_to_mailchimp].invoke

  expect(chimpy).to have_received(:export_all)
end

我想知道是否有更好的方法来解决这个问题,我也希望能解释为什么你不能同时调用#any_instance设置和断言。谢谢您的帮助!

4

1 回答 1

1

尝试这个

it 'should export to all lists' do
  MailchimpExporter.any_instance.should_receive(:export_all)

  Rake::Task[:export_to_mailchimp].invoke
end
于 2013-08-28T21:48:56.410 回答