2015-10-30 176 views
0

我刚从RSpec开始,我有点迷路。任何人都可以请告诉我如何编写这种方法的控制器测试?控制器测试Rspec,Rails 4.2

def list_c 
    @c = params.has_key?(:car) ? Car.new(car_listing_params) : Car.new() 
    @car.user = @user 
    @car.number_of_beds = 4 unless @car.number_of_beds 
    @car.car_type_tag = 'car' unless @car.car_type 
    @page_title = t('home.list_your_car') 
end 
+0

它需要过于宽泛的答案,虽然我可以给你一个小测试的例子。 – Rubyrider

+0

任何你认为会使我处于正确测试方向的东西会有所帮助。谢谢。 – user2645029

+0

是检查我的答案。这可能非常复杂。我只是想给你一个评论提示。如果您没有得到任何意见,请随时发表评论。 – Rubyrider

回答

0

一个rspec控制器测试的小例子。你可能会从这里得到一些想法。
#在这里定义你的帮手。 要求'rails_helper'

# respect method to define test for your controller. 
RSpec.describe YourController, type: :controller do 
    #define your factories for the set of your test 
    # you will decide which one you need to create from factory. Factory girl 
    # is used to mock factories. 
    # @c = params.has_key?(:car) ? Car.new(car_listing_params) : Car.new() 
    # @car.user = @user 
    # @car.number_of_beds = 4 unless @car.number_of_beds 
    # @car.car_type_tag = 'car' unless @car.car_type 
    # @page_title = t('home.list_your_car') 

    let(:user) { FactoryGirl.create :user } 

    before { sign_in user } 

    describe '#title' do 
    context 'with valid params' do 
     before do 
     # in before block, you can request a http call 
     # with parameter. This action repeats before each test runs. 
     get :your_action_of_current_controller, {a_param: a_value, a_date: "16-4-2015"} 
     end 

     it "renders successfully" do 
     # when you call a get request it assigns a response object. 
     expect(response).to be_success 
     end 

     it "returns json" do 
     expect(response.content_type).to be == 'application/json' 
     end 
    end 
    end 
end 
+0

谢谢。一个问题:我如何专门测试循环?像这样:'@c = params.has_key?(:car)? Car.new(car_listing_params):Car.new()' – user2645029

+0

只需在您的获取请求中添加前面的块,您必须发送控制器接收等参数。在提交之后,您可以测试是否通过以下类型的代码添加了新行: 'expect {Foo.bar} .to {counter.count}。by 1'''假设计数器之前有0个计数。 – Rubyrider

+0

谢谢,我会尽力而为。 – user2645029