【问题标题】:Rails RSPEC controller testing to count # of users on INDEX pageRails RSPEC 控制器测试以计算 INDEX 页面上的用户数
【发布时间】:2014-06-07 23:39:32
【问题描述】:

正在进行控制器测试并想测试当我转到索引页面时,我应该看到创建的用户总数,并且应该等于实际创建的所有用户。无法让它工作,也没有错误出现,它只是冻结,我必须按 control c 退出。

    describe "GET #index" do 
    it "show a list of all users" do 
        total = User.all.count
        get :index
        expect(response).to eq total 
    end

【问题讨论】:

    标签: ruby-on-rails unit-testing rspec controller


    【解决方案1】:

    rspec 控制器测试默认不渲染视图,测试成功可能是更好的开始

    describe "GET #index" do 
      it "show a list of all users" do        
        get :index
        expect(response).to be_success
      end
    end
    

    如果你真的想检查渲染

    describe "GET #index" do 
      render_views
    
      it "show a list of all users" do 
        total = User.all.count
        get :index
        expect(response).to contain total.to_s
        # OR
        expect(response.body).to match total.to_s 
      end
    end
    

    见:https://www.relishapp.com/rspec/rspec-rails/v/2-2/docs/controller-specs/render-views

    【讨论】:

      【解决方案2】:

      如果您想检查页面上某些信息的显示,最好使用 Capybara 编写集成测试。 控制器测试的目的是检查传入的参数、在控制器中初始化的变量和控制器响应(渲染视图或重定向......)。 关于您的问题 - 如果您有下一个控制器:

      class UsersController < ApplicationController
        def index
          @users = User.all
        end
      end
      

      你可以编写下一个控制器测试:

      describe UsersController do 
        it "GET #index show a list of all users" do
          User.create(email: 'aaa@gmail.com', name: 'Tim')
          User.create(email: 'bbb@gmail.com', name: 'Tom')
          get :index
          expect(assigns[:users].size).to eq 2
        end
      end
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多