如何在Minitest中测试rake任务?

时间:2017-03-07 09:18:06

标签: ruby-on-rails facebook mocking automated-tests rake-task

我的rails应用程序中有一个rake任务,它将作业发布到facebook。然后更改一些模型值。 因此,测试rake任务的一种方法是调用rake任务并检查已更改的值。

test 'z' do
    # setup some data
    Rake::Task['job:publish_to_facebook'].invoke
    Rake::Task['job:publish_to_facebook'].reenable
    # assert table values that has been changed. 
end

但我如何测试作业是否在Facebook上成功发布?除了使用 capybara selenium-webdriver 之外,还有更好的策略吗?

即使我使用存根和嘲笑,我如何验证我的工作是否已在Facebook上发布?

1 个答案:

答案 0 :(得分:1)

大多数测试不应联系外部API,主要是因为它会减慢测试速度,也可能会遇到速率限制。

  

即使我使用存根和嘲笑,我如何验证我的工作是否在Facebook上发布?

存根和嘲弄的目的正是才能发布到Facebook。相反,您将使用类似Facebook的方法创建一个名为def post_message(message)的类(例如)。这是应用程序的Facebook前门,所有对Facebook的调用都通过这个类。然后,您可以使用像Mocha这样的库在测试期间覆盖def post_message。您可以使用它来验证应用程序是否尝试发布消息,并验证消息本身是否正确。它实际上不会发布消息。

正如我所提到的,你确实希望通过真正的Facebook调用进行一些测试(尽管不是很多)。这些可以像上面所示的那样进行测试,这是一个集成测试,或者它也可以是我上面建议的Facebook类的较小单元测试,这将是一个更好的起点。为此,您需要在Facebook上建立一个测试帐户。然后,您的测试应该清除设置中的所有消息,并使用Facebook的API来验证消息是否实际发布。