Rspec测试双重不符合我在轨道控制器内的预期

时间:2015-07-02 15:52:02

标签: ruby-on-rails rspec

控制器操作:

class GoogleOauth2sController < ApplicationController
  def new
    google_drive_oauth2 = GoogleDriveOauth2.new
    redirect_to google_drive_oauth2.authorization_uri
  end
end

试验:

require 'spec_helper.rb'

describe GoogleOauth2sController do
  let(:google_drive_oauth2) { double("GoogleDriveOauth2", :authorization_uri => "www.reddit.com") }

  describe "GET #new" do
    it "should redirect user to google oauth2 authorization page" do
      get :new
      expect(response.redirect_url).to include("accounts.google.com/o/oauth2/auth")
    end
  end
end

我希望这个测试能够失败,因为我创建了一个“GoogleDriveOauth”类的测试双重版本并删除了返回“www.reddit.com”的方法。然而测试过程,并呼吁谷歌oauth2 auth页面。

我的目标是避免向Google发出api调用,以便首先形成URI(GoogleDriveOauth2类的责任)。据我从文档中可以看出,这应该是方法,我错过了什么?

1 个答案:

答案 0 :(得分:1)

您需要将双重注入您的测试中。 RSpec不知道应该使用双精度的时间/地点。试试这个:

describe GoogleOauth2sController do
  let(:google_drive_oauth2) { double("GoogleDriveOauth2", :authorization_uri => "www.reddit.com") }

  describe "GET #new" do
    it "should redirect user to google oauth2 authorization page" do
      expect(GoogleDriveOauth2).to receive(:new).and_return(google_drive_oauth2)
      get :new
      expect(response.redirect_url).to include("accounts.google.com/o/oauth2/auth")
    end
  end
end

我希望这个测试现在失败。