Я пытаюсь создать API с Rails, используя BDD с RSpec.Версия Rails - 3.1.1, версия Ruby - 1.9.2, версия Devise - 1.5.3, версия rspec - 2.7.0.Я относительно новичок в Rails и очень плохо знаком с RSpec.
Я определил простой RSpec следующим образом для тестирования FormsController практически без логики.
describe FormsController, " handling GET /forms" do
include Devise::TestHelpers
render_views
before do
user = Factory.create(:user) # Handle Devise authentication
user.confirm!
sign_in user
@form = mock_model(Form)
Form.stub!(:all).and_return([ @form ])
end
it "gets successfully" do
get :index, :format => :json
response.should be_success
end
it "finds all forms" do
Form.should_receive(:all).and_return([@form])
get :index, :format => :json
Rails.logger.info "*** response.body="+response.body
end
end
Код контроллера формы очень проств настоящее время.
class FormsController < ApplicationController
before_filter :authenticate_user!
# GET /forms
# GET /forms.json
def index
@forms = Form.find_all_by_owner_id(current_user.id)
respond_to do |format|
format.html # index.html.erb
format.json { render :json => @forms }
end
end
end
Когда я запускаю спецификацию, "находит все формы" всегда терпит неудачу с
Failure/Error: Form.should_receive(:all).and_return([@form])
(<Form(id: integer, title: string, owner_id: integer, created_at: datetime, updated_at: datetime) (class)>).all(any args)
expected: 1 time
received: 0 times
Выходные данные из log / test.log показывают:
*** response.body=[]
Почему?Я чувствую, что проблема связана с Form.stub!(:all).and_return([ @form ])
, но я не уверен, как отлаживать.
Заранее спасибо.