2014-04-18 49 views
5

首先,我在模擬/存根新的,和我有麻煩嘲諷/磕碰麻煩,用嘲諷的數據庫和存根:保存

這是我的應用程序代碼:

describe 'Register an User' do 
    VALID_USERNAME = "..." 
    VALID_PASSWORD = "..." 
    VALID_USER = User.new(VALID_USERNAME, VALID_PASSWORD) 

    before (:each) do 
     User.any_instance.stub(:save).and_return(true) 
    end 

    it 'should create a new user' do 
     post :create, :username => VALID_USERNAME, :password => VALID_PASSWORD 
     expect(response.status).to eq(201) 
     #user_inserted = ... 
     #expect(user_inserted).to eq(VALID_USER) 
    end 
end 

和:

def create 
     username = params[:username] 
     password = params[:password] 
     if not username or not password 
      render :json => '', :status => 400 
     else 
      success = User.new(username, password).save 
      if success 
       render :json => '', :status => 201 
      else 
       render :json => '', :status => 500 
      end 
     end 
    end 

我想做一個模擬的ActiveRecord,測試'創造',而不需要測試'得到'。 這裏的想法是當我調用'user.save'可以保存用戶而不使用數據庫,然後我會在我的測試用例中訪問,所以我保證用戶被'插入'我的數據庫。

如果我運行我的測試,它會通過,但我沒有驗證我願意做什麼。任何幫助或想法?

謝謝!

+0

什麼是'User.new(VALID_USERNAME,VALID_PASSWORD)'?您的自定義方法是「新」方法嗎?如果是,它會返回什麼?請注意,來自ActiveRecord的['new'](http://api.rubyonrails.org/classes/ActiveModel/Model.html#method-c-new)接受hash – gotva

回答

1

這沒有意義,因爲您無法在數據庫中插入數據庫而無法測試插入。爲什麼?

Rails帶有內置驗證,它成爲保存項目的第一步。如果驗證通過,則通過數據庫中的ActiveRecord插入項目。數據庫驗證在此步驟開始,如果有任何失敗,則引發異常。

所以。如果要測試是否可以在數據庫中創建用戶,請將驗證添加到與數據庫匹配的模型。然後你將可以使用方法is_valid?

這將確保您的用戶有效存儲在數據庫中。因此,您將能夠在任何地方使用它:user_instance.is_valid?定義了一個可插入的項目。

我希望這是你問的地方。