控制器操作:
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类的责任)。据我从文档中可以看出,这应该是方法,我错过了什么?
答案 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
我希望这个测试现在失败。