2017-03-07 34 views
0

我在我的rails应用程序中发布了一个rake任务,这个任务发布到facebook。然后改变一些模型值。 因此,测试rake任务的一种方法是调用rake任务并检查已更改的值。如何测试Minitest中的耙子任务?

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上?有没有更好的策略,除了使用水豚硒-webdriver

即使我使用存根和嘲讽那么我如何验证我的工作是在Facebook上发布?

回答

1

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

即使我用stubbing和嘲笑,那么我如何验证我的工作是在facebook上发布?

存根和嘲讽的角度正好是而不是发布到Facebook。相反,您可以使用def post_message(message)等方法创建一个名为Facebook的类(例如)。这是Facebook的前门,所有的Facebook电话都要经过这个课程。然后,您可以使用Mocha这样的库在测试期间覆盖def post_message。您可以使用它来验证应用程序是否尝试发布消息,并验证消息本身是否正确。它不会实际发布消息。

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

+0

感谢您的回答。你能否用摩卡解释覆盖方法。意味着如何使用摩卡测试该方法?正如你所建议的,如果我将post_message移动到单独的类,那么我将如何测试该方法正在完成其工作。忘记检查Facebook上的消息 –

+0

我只是想测试post_message是否在做它的工作。 –

+0

查看http://gofreerange.com/mocha/docs/进行嘲讽。但是,如果你唯一的担心就是测试你在Facebook上发布信息并且不担心构建信息的逻辑 - 那么这就是我在第二段中的意思,也就是说我会为所有的应用程序创建一个简单的Facebook类Facebook的需求,并以我提到的方式撰写FacebookTest课程。这部分与嘲弄无关。理想情况下,您需要全部三种测试(单元测试与模拟,单元测试以检查调用外部API,以及集成测试来测试所有这些)。 – mahemoff