简体   繁体   中英

Testing Controller for Admin Panel Metrics in Rails

I have a very simple admin panel where I show the number of total users, the number of new users this week and the number of new users this month. I want to write a test for that in my controller spec. Currently I'm trying to get the total number of users to work. New to coding. Thanks!

I'm getting this error:

1) Admin::DashboardController metrics shows correct metrics for # of users
 Failure/Error: users = FactoryGirl.create_list([@user_1, @user_2, @user_3])
 ArgumentError:
   wrong number of arguments (1 for 2+)

dashboard_controller_spec.rb:

  describe 'metrics' do
    before :each do
      @user_1 = FactoryGirl.create(:user, created_at: Time.now)
      @user_2 = FactoryGirl.create(:user, created_at: Time.now - 1.week)
      @user_3 = FactoryGirl.create(:user, created_at: Time.now - 4.week)
    end

    it 'shows correct metrics for # of users' do
      users = FactoryGirl.create_list([@user_1, @user_2, @user_3])
      expect(assigns(:metrics[:users][:total])).to eq(users)
    end

    it 'shows correct number of new users this week' do
    end

    it 'shows correct number of new users this month' do
    end
  end

dashboard_controller.rb

class Admin::DashboardController < ApplicationController
  before_action :authorize_user!

  def index
    @metrics = {
      users: {
        total: User.count,
        this_week: User.where('created_at >= ?', 1.week.ago).count,
        this_month: User.where('created_at >= ?', 4.weeks.ago).count
      }
    }
  end
end

I found the answer:

describe 'metrics' do
  before :each do
    @user_1 = FactoryGirl.create(:user, created_at: Time.zone.now)
    @user_2 = FactoryGirl.create(:user, created_at: Time.zone.now - 1.week)
    @user_3 = FactoryGirl.create(:user, created_at: Time.zone.now - 4.weeks)
  end

it 'shows correct metrics for # of users' do
  expect do
    users = FactoryGirl.create_list([@user_1, @user_2, @user_3])
    assigns(:metrics).to eq(users)
  end
end

it 'shows correct number of new users this week' do
  expect do
    users = FactoryGirl.create_list([@user_1, @user_2, @user_3])
    assigns(:metrics[users][last_week]).to eq(users)
  end
end

it 'shows correct number of new users this month' do
  expect do
    users = FactoryGirl.create_list([@user_1, @user_2, @user_3])
    assigns(:metrics[users][last_month]).to eq(users)
  end
end

end

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM