我的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上发布?
答案 0 :(得分:1)
大多数测试不应联系外部API,主要是因为它会减慢测试速度,也可能会遇到速率限制。
即使我使用存根和嘲笑,我如何验证我的工作是否在Facebook上发布?
存根和嘲弄的目的正是不才能发布到Facebook。相反,您将使用类似Facebook
的方法创建一个名为def post_message(message)
的类(例如)。这是应用程序的Facebook前门,所有对Facebook的调用都通过这个类。然后,您可以使用像Mocha这样的库在测试期间覆盖def post_message
。您可以使用它来验证应用程序是否尝试发布消息,并验证消息本身是否正确。它实际上不会发布消息。
正如我所提到的,你确实希望通过真正的Facebook调用进行一些测试(尽管不是很多)。这些可以像上面所示的那样进行测试,这是一个集成测试,或者它也可以是我上面建议的Facebook
类的较小单元测试,这将是一个更好的起点。为此,您需要在Facebook上建立一个测试帐户。然后,您的测试应该清除设置中的所有消息,并使用Facebook的API来验证消息是否实际发布。