2009-08-05 32 views
10

Đối với cuộc sống của tôi, tôi không hiểu tại sao Authlogic không đăng nhập tôi trong bài kiểm tra tích hợp này. Tôi đã không có bất kỳ vấn đề w/Authlogic đăng nhập tôi trong các bài kiểm tra chức năng bằng cách sử dụng mã này. Theo rdocs authlogic (http://tinyurl.com/mb2fp2), mô phỏng một trạng thái đăng nhập là như nhau trong chức năng kiểm tra tích hợp &, vì vậy tôi khá bối rối. Bất kỳ sự giúp đỡ nào cũng được đánh giá cao!Kiểm tra tích hợp với Authlogic?

class TipsController < ApplicationController 
    before_filter :require_user, :only => [:destroy, :undelete] 
    def destroy 
    @tip = Tip.find(params[:id]) 

    if can_delete?(@tip) 

     @tip.destroy 

     set_flash("good", "Tip deleted. <a href=\"#{undelete_tip_url(@tip.id)}\">Undo?</a>") 
     respond_to do |format| 
     format.html { redirect_to city_path(@tip.city)} 
     end 
    else 
     set_flash("bad", "Seems like you can't delete this tip, sorry.") 
     respond_to do |format| 
     format.html { render :action => "show", :id => @tip} 
     end 
    end 
    end 
end 


class DeleteTipAndRender < ActionController::IntegrationTest 
    context "log user in" do 
    setup do 
     @user = create_user 
     @tip = create_tip 
    end 

    context "delete tip" do 
     setup do 
     activate_authlogic 
     UserSession.create(@user) 
     @us = UserSession.find 
     post "/tips/destroy", :id => @tip.id 
     end 

     should_redirect_to("city_path(@tip.city)"){city_path(@tip.city)} 
    end 
    end 
end 

Trả lời

3

Dựa trên mã kiểm tra vào user_sessions_controllercreate phương pháp, trong đó có một hash của thông tin đăng nhập, tôi đã có thể làm cho nó hoạt như thế này trong thử nghiệm hội nhập của tôi:

UserSession.create(:email => '[email protected]', :password => 'password') 

nhưng không phải với:

UserSession.create(@user) 
+1

cảm ơn. từ dòng này trong rdoc: UserSession.create (người dùng (: ai đó)) tôi cho rằng tôi có thể vượt qua @ obj. đánh giá cao sự giúp đỡ! – kareem

+1

hmm theo này: http://rdoc.info/rdoc/binarylogic/authlogic/blob/73c4cccb38189f0e52e1e362992dfb9db7d1206f/Authlogic/Session/UnauthorizedRecord.html tôi sẽ có thể làm UserSession.create (@user) và hoạt động ... wtf. – kareem

-3

Hãy xem rdoc.

+0

thx ... tôi liên kết với rdoc trong bài đăng gốc của mình và nghĩ rằng tôi đang theo dõi nội dung trong đó. đó là lý do tại sao tôi đăng - tôi không nhận được kết quả mong đợi :) – kareem

+0

Hmmm. Sai lầm của tôi tôi không thấy điều đó. Bạn có thể bỏ phiếu xuống. Nó sẽ không giải quyết vấn đề của bạn mặc dù. – Waseem

+0

Ok nó khá buồn cười nhưng tôi phải đối mặt với cùng một vấn đề. :) bạn đã làm cho nó được giải quyết chưa? – Waseem

2

tôi đã phát hiện ra rằng xét nghiệm hội nhập tôi cần phải đăng nhập thông qua một bài:

setup do 
    post 'user_session', :user_session => {:email => '[email protected]', :password => 'password'} 
end 

Điều này thiết lập phiên một cách chính xác, trong khi phương pháp được đề cập ở trên chỉ hoạt động đối với tôi trong các bài kiểm tra chức năng.

4

Tôi cũng đang sử dụng Authlogic với Shoulda (nhưng với factory_girl ở trên cùng).

kiểm tra functionnal tôi trông giống như:

require 'test_helper' 

class LoansControllerTest < ActionController::TestCase 
[...] 

    context "as a signed-in user, with an active loan" do 
    setup do 
     @user = Factory(:user) 
     @user_session = UserSession.create(@user) 
     @loan = Factory(:loan, :ownership => Factory(:ownership, :user => @user)) 
    end 

    context "on GET to :index" do 
     setup do 
     get :index 
     end 

     should_respond_with_success 
    end 
    end 
end 

Trên thực tế, bạn có thể vượt qua một người dùng hợp lệ để UserSession, đó là trong rdoc cũng có. Bạn cũng nên tránh gọi activate_authlogic trong mỗi bài kiểm tra điều khiển:

ENV["RAILS_ENV"] = "test" 
require File.expand_path(File.dirname(__FILE__) + "/../config/environment") 
require 'test_help' 

class ActiveSupport::TestCase 
    [...] 
    # Add more helper methods to be used by all tests here... 
    include Authlogic::TestCase 

    def setup 
    activate_authlogic 
    end 
end 
2

Yeah, tôi tìm thấy trong tuần này rằng với rspec: trong thông số kỹ thuật chức năng bạn mô phỏng đăng nhập tốt w/UserSession.create(@user). Nhưng nếu bạn thử điều đó trong một thông số tích hợp, nó không hoạt động. Để đăng nhập từ các thông số tích hợp, tôi thấy rằng tôi phải chạy các biểu mẫu (với webrat) rõ ràng sẽ là vấn đề đối với những thứ như đăng nhập Facebook và OpenID.

0

đối với những người tìm thấy bài đăng này trong Google và Tư pháp Greater - bạn phải thiết lập persitence_token thuộc tính trong mô hình tài. Ví dụ. bạn có thể gọi @user.reset_persistence_token! và mọi thứ chỉ bắt đầu hoạt động. :)

0

tôi đã cùng một vấn đề và tôi có thể sửa chữa nó bằng cách thủ công đăng nhập (như những người khác đã trả lời)

Ngoài ra tôi đã phải sửa chữa cookie của tôi miền:

Rails sử dụng www.example.com cho các thử nghiệm của nó và vì tôi đặt tên miền cookie thành một giá trị khác trong số application.rb (thông qua config.cookie_domain) cookie phiên được tạo sau khi đăng nhập không thể truy cập được từ các yêu cầu tiếp theo.

Sau khi đặt tên miền cookie chính xác, mọi thứ hoạt động trở lại.

2

Tôi không thể làm cho nó hoạt động với câu trả lời được chấp nhận, nhưng đã gần. Tôi phải thêm dấu chấm than vào cuối hàm:

UserSession.create!(@user) 

Nó hoạt động với Ruby v3.2.18 và Authlogic v3.4.2. Cảm ơn bạn đã chỉ cho tôi đúng hướng.

+0

Tôi đang sử dụng các phiên bản tương tự như bạn làm, và đây là những gì tôi nhận được trong irb: (rdb: 1) UserSession.create (User.find (25)) # " "}> (rdb: 1) UserSession.create (User.find (25)) tiết kiệm đúng một điều rõ ràng khác phải can thiệp vào mô hình người dùng/phiên – prusswan

+0

Vui lòng kiểm tra lại bằng dấu chấm than (!) Trong hàm . – ZombieBsAs

+0

Nó hoạt động tốt trên bộ điều khiển của tôi, tôi đã không kiểm tra nó trên bảng điều khiển đường ray. – ZombieBsAs

Các vấn đề liên quan