Проблема Omniauth тестирования тестирования RSpec
Я следовал рельсам, приведенным omniauth, чтобы создать аутентификацию для twitter ( http://railscasts.com/episodes/235-omniauth-part-1?view=comments ). Он прекрасно работает в разработке, но я не могу заставить rspec обнаружить, что я создал аутентификацию. Вот мой сниппет для функции create в моем контроллере аутентификации:
def create
begin
auth_hash = request.env["omniauth.auth"]
@auth = current_user.authentications.build( :provider => auth_hash['provider'],
:uid => auth_hash['uid'],
:name => auth_hash['user_info']['name'],
:nickname => auth_hash['user_info']['nickname'],
:image => auth_hash['user_info']['image']
)
if @auth.provider.downcase == "twitter"
@auth.auth_token = auth_hash['credentials']['token']
@auth.secret_token = auth_hash['credentials']['secret']
@auth.site = auth_hash['user_info']['urls']['Twitter']
elsif @auth.provider == "Facebook"
end
rescue
redirect_to current_user, :flash => { :error => "Missing oauth data!! Check with administrator!"}
else
if @auth.save
msg = "Authentication success"
else
msg = "Already have authentication"
end
redirect_to current_user, :notice => msg
end
end
Включено в мои маршруты:
match '/auth/:provider/callback' => 'authentications#create'
У меня есть следующая настройка в моем rspec_helper:
OmniAuth.config.test_mode = true
OmniAuth.config.add_mock(:twitter, { :provider => "twitter",
:uid => "1234",
:user_info => { :name => "Bob hope",
:nickname => "bobby",
:urls => {:Twitter => "www.twitter.com/bobster"}},
:credentials => { :auth_token => "lk2j3lkjasldkjflk3ljsdf"} })
Вот мой код rspec, который не является работа:
describe "Post 'create'" do
before(:each) do
@user = Factory(:user)
sign_in @user
end
describe "success" do
before(:each) do
request.env["omniauth.auth"] = OmniAuth.config.mock_auth[:twitter]
end
it "should create authentication" do
lambda do
post :create, :provider => "twitter"
response.should redirect_to(@user)
end.should change(Authentication, :count).by(1)
end
end
end
Ошибка, которую я получаю:
1) AuthenticationsController Post' create ' success должен создать аутентификацию Сбой/ошибка: лямбда делать счетчик должен был быть изменен на 1, но был изменен на 0 # ./spec / контроллеры / authentication_controller_spec.РБ: 57
Я все проверил и не могу понять, что я делаю не так. Кто-нибудь может помочь?2 ответа:
Наконец-то я понял, в чем дело. в моем глумиться :auth_token, предполагают, чтобы быть :знак. Это было причиной неудачной проверки.
Разве это не должен быть запрос get?
describe "success" do before(:each) do request.env["omniauth.auth"] = OmniAuth.config.mock_auth[:twitter] end it "should create authentication" do lambda do get :create, :provider => "twitter" response.should redirect_to(@user) end.should change(Authentication, :count).by(1) end end