我们开始使用Rails 3、RSpec 2和OmniAuth 2开发一个新的网站。我们希望遵循TDD,使用RSpec编写身份验证,但实际上我们不知道从哪里开始。我们不想测试gem,因为它已经被测试过了,但是我们想测试应用程序的流程,并且它已经根据回调的结果正确路由了。
到目前为止,最好的是我们将问题分为两个阶段:1-回调前:假装使用facebook和twitter等服务来回电话2-回调后:获取结果并创建用户和相关服务
请引导我们,给我们一些光明:)
您签出Wiki了吗?
**编辑
可能是(未经测试):
before do
OmniAuth.config.mock_auth[:twitter] = {
'uid' => '123545'
}
end
it "sets a session variable to the OmniAuth auth hash" do
controller.session[:auth_hash]['uid'].should == '123545'
end
我遇到了为OmniauthCallbacksController编写RSpec的问题,对此做一些研究,它为我工作。我在这里添加我的代码,如果有人发现必要的。这些测试是针对快乐路径的:)
require 'spec_helper'
describe OmniauthCallbacksController do
describe "#linkedin" do
let(:current_user) { Fabricate(:user) }
before(:each) do
OmniAuth.config.test_mode = true
OmniAuth.config.mock_auth[:linkedin] = OmniAuth::AuthHash.new({provider: :linkedin, uid: '12345', credentials: {token: 'linkedin-token', secret: 'linkedin-secret'}})
request.env["devise.mapping"] = Devise.mappings[:user]
@controller.stub!(:env).and_return({"omniauth.auth" => OmniAuth.config.mock_auth[:linkedin]})
User.stub(:from_auth).and_return(current_user)
end
describe "#linkedin" do
context "with a new linkedin user" do
before { get :linkedin }
it "should authenticate user" do
warden.authenticated?(:user).should == true
end
it "should set current_user" do
subject.current_user.should_not be_nil
end
it "should redirect to root_path" do
response.should redirect_to(root_path)
end
end
end
end
end