Ich verwende Rspec und Rails 3 zum Testen. Ich habe meine Modelle und Helfer getestet, aber ich weiß nicht, wie ich anfangen kann, Controller zu testen. Fast all meine Daten in meinen Controller-Aktionen ist so etwas wie diese Beispiele gezogen werden:Testen von Rails-Controllern mit RSpec-Test: current_account.projects
@services = current_account.services
@projects = current_person.projects
@projects = current_account.projects.active
# this is really @projects = current_person.account.projects.active)
Ich kann keine Beispiele scheinen zu finden, wie die Daten zu prüfen, die auf diese Weise gezogen wird. Alle Beispiele, die ich gefunden habe, sind nicht auf ein Konto oder eine Person beschränkt. Kann mir jemand einen Artikel darüber geben, wie man diese Art von Arrangement vortäuscht oder stibitzt? Ist das ein Zeichen dafür, dass dieser gesamte Ansatz nicht korrekt ist? Unten habe ich einen kompletten Sample-Controller eingefügt.
Jede Hilfe würde sehr geschätzt werden.
Danke, David
class ServicesController < ApplicationController
# Run authorizations
filter_resource_access
# Respond to ...
respond_to :html, :xml, :json
respond_to :js, :only => [:new, :create, :edit, :update, :destroy]
# GET /services
# GET /services.xml
def index
@services = current_account.services.order("name").paginate(:page => params[:page])
respond_with(@services)
end
# GET /services/1
# GET /services/1.xml
def show
@service = current_account.services.find(params[:id])
respond_with(@service)
end
# GET /services/new
# GET /services/new.xml
def new
@service = current_account.services.new
respond_with(@service)
end
# GET /services/1/edit
def edit
@service = current_account.services.find(params[:id])
respond_with(@service)
end
# POST /services
# POST /services.xml
def create
@service = current_account.services.new(params[:service])
if @service.save
# flash[:notice] = 'A service was successfully created.'
end
respond_with(@service, :location => services_url)
end
# PUT /services/1
# PUT /services/1.xml
def update
@service = current_account.services.find(params[:id])
if @service.update_attributes(params[:service])
# flash[:notice] = 'The service was successfully updated.'
end
respond_with(@service, :location => services_url)
end
# DELETE /services/1
# DELETE /services/1.xml
def destroy
@service = current_account.services.find(params[:id])
if @service.destroy
flash[:notice] = "The service was successfully deleted."
else
flash[:warning] = @service.errors.full_messages.inject("") { |acc, message| acc += message }
end
respond_with(@service)
end
end
------ UPDATE
Dank Xaid Lösung war ich in der Lage, eine Lösung zu erhalten:
context "logged_in" do
before(:each) do
@current_account = Factory.create(:account)
controller.stub!(:current_account).and_return(@current_account)
@services = FactoryGirl.create_list(:service, 10, :account => @current_account)
@services << @current_account.services.first
@current_account.services.stub!(:all).and_return(@services)
end
# INDEX
describe "GET services" do
before(:each) do
get :index
end
it "should set @services when accessing GET /index" do
assigns[:services].should == @services
end
it "should respond with success" do
response.should be_success
end
end
end
Danke! Dies ist mein erstes Mal mit Stubs arbeiten, so dass ich ein wenig verwirrt war, wo ich anfangen soll. Ich gebe dir eine Chance und lasse dich wissen, wie es für mich funktioniert hat. –