2017-03-07 80 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