测试让控制器。 RSpec的

时间:2014-07-10 14:35:36

标签: ruby-on-rails ruby rspec

我想测试一下letrate生成的控制器。 但我不知道这是怎么回事,因为我无法理解它是如何运作的。 的 rater_controller.rb

class RaterController < ApplicationController

  def create
    if user_signed_in?
      obj = params[:klass].classify.constantize.find(params[:id])
      obj.rate params[:score].to_i, current_user, params[:dimension]

      render :json => true
    else
      render :json => false
    end
  end

end

更新

Letsrate是rails的宝石

rater_controller_spec.rb

require 'rails_helper'

describe RaterController do

  describe 'POST create' do
    let(:valid_attributes)do {
    klass: 'Hotel',
    dimension: 'rating',
    score: '5'
    }
    end

    it 'user signed in' do
      user = create(:user)
      hotel = create(:hotel)
      post :create, { rate: valid_attributes, rater_id: user.id, rateble_id: hotel.id }
      sign_in user


    end
  end
end

1 个答案:

答案 0 :(得分:1)

您发布的源代码非常明显它是如何工作的。你需要在RaterController中使用这些参数调用create动作:klass,id,score,dimension。假设klass param是“Restaurant”,它也是ActiveRecord模型类的名称。控制器将在数据库中查询具有指定ID的餐馆。然后它将使用指定的参数调用该对象上的rate方法,这可能会在数据库中插入一行代表用户的新评级。要测试它,您可以简单地调用控制器操作,然后检查以确保该行已添加到数据库中。