0

我正在编写一个规范来验证我的Video模型是否会在创建 vimeo 视频时为其创建正确的缩略图。它看起来像这样:

    it "creates thumbnail url" do
      vimeo_url = "http://player.vimeo.com/video/12345"
      vid = Factory.build(:video, video_url:vimeo_url)
      # thumbnail created when saved
      vid.save!

      expect do
        URI.parse(vid.thumbnail_url)
      end.to_not raise_error
    end

问题是我的测试非常慢,因为它必须访问 vimeo.com。所以我试图存根调用服务器的方法。所以两个问题:

1)这是存根的正确方法/时间吗

2)如果是,我该如何存根?在我的Video模型中,我有一个名为get_vimeo_thumbnail()vimeo.com 的方法。我想存根该方法。但是,如果在我的规范中我这样做vid.stub(:get_vimeo_thumbnail).and_return("http://someurl.com")是行不通的。当我运行测试时,它仍然会访问 vimeo.com。

4

2 回答 2

2

VCR gem可能值得考虑。它会在您第一次运行它时访问真正的 Web 服务并记录响应,以便下次运行测试时可以重放它(使后续测试更快)。

stub如果你之前打电话,我看不出你打的存根电话有什么问题save!

于 2012-06-06T09:30:23.193 回答
0

我还支持使用“vcr”gem。

还有一个关于 VCR 的 Railscast(专业)剧集: http ://railscasts.com/episodes/291-testing-with-vcr

VCR 可用于将所有传出的 Web 服务调用记录到“磁带”(固定装置)中,当再次运行测试时将重放这些调用。所以你得到了最初的“真实世界”响应集,但不会再访问远程 api。

当本地没有可用的记录响应时,它还具有执行“按需”请求的选项,以及发出明确的“实时”请求。

您可以并且应该不时对实时端点运行测试以进行验证。

于 2012-06-10T05:15:58.907 回答