Tôi đang cố gắng để có được RSpec làm việc cho một ứng dụng giàn giáo đơn giản, bắt đầu với các thử nghiệm giàn giáo rspec.rail3/rspec/devise: kiểm tra bộ điều khiển rspec không thành công trừ khi tôi thêm một dummy = subject.current_user.inspect
Mỗi wiki phát sinh, tôi đã thêm nhiều mục cấu hình khác nhau, một nhà máy cho người dùng và quản trị viên, và những điều đầu tiên tôi làm trong bộ điều khiển spec là login_admin.
kỳ lạ nhất điều, mặc dù ... tất cả thông số kỹ thuật của tôi thất bại trừ khi tôi thêm các tuyên bố sau ngay sau khi it ... do
dòng:
dummy=subject.current_user.inspect
(Với dòng, như hình dưới đây, các thông số kỹ thuật vượt qua Nếu không có dòng đó. , tất cả các bài kiểm tra thất bại với các chỉ định là nil thay vì giá trị dự kiến. Tôi chỉ tình cờ phát hiện ra rằng khi tôi đặt một số câu lệnh để xem liệu current_user đã được đặt chính xác chưa.)
Vì vậy, nó hoạt động như thế nào tuyên bố giả bằng cách nào đó 'buộc' current_user được nạp hoặc làm mới hoặc nhận ra.
Bất cứ ai có thể giải thích những gì đang xảy ra và tôi nên làm gì khác đi vì vậy tôi không cần câu lệnh giả?
#specs/controllers/brokers_controller_spec.rb
describe BrokersController do
login_admin
def valid_attributes
{:name => "Bill", :email => "[email protected]", :company => "Example Inc", :community_id => 1}
end
def valid_session
{}
end
describe "GET index" do
it "assigns all brokers as @brokers" do
dummy=subject.current_user.inspect # ALL SPECS FAIL WITHOUT THIS LINE!
broker = Broker.create! valid_attributes
get :index, {}, valid_session
assigns(:brokers).should eq([broker])
end
end
describe "GET show" do
it "assigns the requested broker as @broker" do
dummy=subject.current_user.inspect # ALL SPECS FAIL WITHOUT THIS LINE!
broker = Broker.create! valid_attributes
get :show, {:id => broker.to_param}, valid_session
assigns(:broker).should eq(broker)
end
end
và theo devise wiki ở đây là làm thế nào tôi đăng nhập một: dùng hoặc: admin
#spec/support/controller_macros.rb
module ControllerMacros
def login_admin
before(:each) do
@request.env["devise.mapping"] = Devise.mappings[:admin]
sign_in Factory.create(:admin) # Using factory girl as an example
end
end
def login_user
before(:each) do
@request.env["devise.mapping"] = Devise.mappings[:user]
user = Factory.create(:user)
user.confirm! # or set a confirmed_at inside the factory. Only necessary if you are using the confirmable module
sign_in user
end
end
end
những gì bạn có trong login_admin? – apneadiving
thêm nó vào cuối câu hỏi của tôi ngay bây giờ ... – jpwynn
không thành công nếu bạn loại bỏ '.inspect'? có lẽ đó là một vấn đề khởi tạo. lỗi mà bạn nhận được cho các bài kiểm tra thất bại là gì? – phoet