Я только начинаю работать с rspec 2 и думаю, что возникла проблема где-то в одной из моих заглушек. Я пытаюсь проверить действие 'show' из моего client_controller.rb, но оно не удается, возвращая Enumerable :: Enumerator вместо объекта. Действие 'index' работает отлично. Моя цель - убедиться, что вошедший в систему пользователь может просматривать своих клиентов, но не других клиентов пользователя.
before_filter :require_user
def index
@clients = current_user.clients
end
def show
@client = current_user.clients.find(params[:id])
end
с:
before :each do
stub_current_user
@my_client = mock_model(Client, :user_id => @current_user.id)
@not_my_client = mock_model(Client, :user_id => @current_user.id + 1)
@current_user.stub!(:clients) { @clients = [@my_client] }
@clients.stub!(:find){ @my_client }
end
describe "GET index" do
it "assigns the current user's clients as @clients" do
get :index
assigns(:clients).should eq([@my_client])
end
end
describe "GET show" do
it "assigns the requested client as @client if @client is the current user's client" do
get :show, :id => @my_client.id
assigns(:client).should eq(@my_client)
end
it "does not assign the requested client if @client is not the current user's client" do
get :show, :id => @not_my_client.id
assigns(:client).should == nil
end
end
stub_current_user находится в spec_helpers.rb:
def stub_current_user
@current_user = mock_model(User, :name => 'Bob Johnson', :email => 'bob@johnson.com',
:role => "account_holder", :incomplete_subscription? => false,
:plan => mock_model(Plan, :client_limit => 5),
:monthly_rate => 100)
if defined?(controller) # for controller specs
controller.stub!(:current_user).and_return(@current_user)
elsif defined?(template) # for view specs
template.stub!(:current_user).and_return(@current_user)
else
'wat'
end
end
Проверка действия 'index' проходит, но оба теста действия 'show' завершаются неудачно с этими ошибками:
1) ClientsController GET show assigns the requested client as @client if @client is the current user's client
Failure/Error: assigns(:client).should eq(@my_client)
expected #<Client:0x81b67840 @name="Client_1007">
got #<Enumerable::Enumerator:0x1036471d0>
(compared using ==)
Diff:
@@ -1,2 +1,2 @@
-#<Client:0x81b67840 @name="Client_1007">
+#<Enumerable::Enumerator:0x1036471d0>
# ./spec/controllers/clients_controller_spec.rb:31
2) ClientsController GET show does not assigns the requested client if @client is not the current user's client
Failure/Error: assigns(:client).should == nil
expected: nil,
got: #<Enumerable::Enumerator:0x1035336b8> (using ==)
# ./spec/controllers/clients_controller_spec.rb:39
Я не уверен, что я ошибаюсь в издевательствах, самих тестах или где-то еще.