ズッキーニのプログラミング実験場

プログラミング + アカデミック + 何か面白いこと。 記載されているものは基本的に私が所属する団体とは関係がありません。

   Jul 14

[Ruby][Rspec]ファイル出力のテスト

by zuqqhi2 at 2013年7月14日
Pocket

やりたいこと

Rspecでファイル出力するバッチのテストを書きたい。

プログラム

バッチ

mongoDBからデータをcsvファイルに出力する。

require 'mongo'
require 'active_support/all'
require 'yaml'
require 'logger'

class GetUserActionLogs
	def self.setup
		@@config = YAML::load(File.open(File.expand_path('../../../config/common.yml', __FILE__)))

		# Logger Setting
		@@app_logger = Logger.new(File.open(@@config['get_user_action_logs']['app_log_path'] + 'get_user_action_logs.log', 'a'))

		# Connection with mongoDB
		@conn = Mongo::Connection.new
		@userdb = @conn.db('action_log')
		@collection = @userdb.collection('current_00')
	end

	def self.process
		self.setup

		@@app_logger.info "#{Time.now.to_s} get_user_action_logs.rb start."
		self.output_action_log_csv
		@@app_logger.info "#{Time.now.to_s} get_user_action_logs.rb end."

		return true
	end

	def self.output_action_log_csv
		filename = File.join(@@config['get_user_action_logs']['output_dir'], "user_action_log" + Time.now.strftime("%Y%m%d") + ".csv")
		writer = File.open(filename, "w")

		0.upto(@@config['action_log_db']['num_collections']-1).each{ |i|
			records_count = 0
			@collection = @userdb.collection('current_' + sprintf("%02d", i))
			@collection.find.each{ |records|
				records_count += 1
				writer.write records.values_at("user_id", "action_id", "action_type", "timeslot").join(",")
			}
			@@app_logger.info "#{Time.now.to_s} current_#{sprintf("%02d", i)} : #{records_count} records"
		}
		writer.close()

	end
end

GetUserActionLogs.process

Rspec

require_relative '../../spec_helper'
require_relative '../../../batches/get_user_action_logs/get_user_action_logs'

describe GetUserActionLogs do

	describe '.process' do
		it 'should get true' do
			GetUserActionLogs.process().should == true
		end		

		it 'should exist file user_action_logYYYYMMDD.csv' do
			filename=GetUserActionLogs.class_eval("@@config")['get_user_action_logs']['output_dir']+"user_action_log"+Date.today.strftime("%Y%m%d")+".csv"
			File.exist?(filename).should == true
		end
	end
end

Related Posts

Pocket

You can follow any responses to this entry through the RSS 2.0 feed. Both comments and pings are currently closed.