簡體   English   中英

Rspec測試軌生成CSV

[英]Rspec test rails generate CSV

我有一個簡單的CSV rails生成器,我不知道如何使用rspec對其進行測試。 我試圖按照這篇文章https://making.dia.com/testing-csv-files-in-rails-on-the-fly-7a1285cc2aac和那個也用RSpec測試CSV.generate,但是我只是不這樣做不了解發生了什么,這些例子似乎有所不同。

module AdminLogData
  class CsvAdminLogGenerator
    LOG_HEADERS = ['Date&Time', 'Action', 'New Data'].freeze

    def initialize(start_date:, end_date:)
      @start_date = start_date
      @end_date = end_date
    end

    def call
      AdminPanelLog.dates_between(start_date, end_date).find_each do |admin_log|
        CSV.generate(headers: LOG_HEADERS, col_sep: ';', encoding: 'UTF-8') do |csv|
          csv << admin_log.created_at
          csv << admin_log.action_type
          csv << admin_log.admin_email
          csv << admin_log.new_data
        end
      end
    end
  end
end

有人可以解釋一下如何測試這門課嗎? 我應該先創建一些假csv嗎?

spec

RSpec.describe AdminLogData::CsvAdminLogGenerator do
  subject(:csv_file) { described_class.new(start_date, end_date).call }

  let(:start_date) { 3.months.ago }
  let(:end_date) { 2.months.ago }

  let(:header) { 'column1, column2, column3' }
  let(:row2) { 'value1, value2, value3' }
  let(:row3) { 'value1, value2, value3' }
  let(:rows) { [header, row2, row3] }

  it 'creates CSV file with proper value' do
    expect(csv).to receive(:<<).with(log.created_at)
  end
end

編輯:

   expected collection contained:  ["2019-06-17 22:13:48 +0200,New,monte@kuphal.biz,\"{\"\"email\"\"=>\"\"jeanna@schinner.io\"\", \"\"ro...=>\"\"2019-09-16T22:13:48.752+02:00\"\", \"\"other_activities\"\"=>\"\"forbidden websites\"\"}\"\n"]
   actual collection contained:    ["2019-06-17 22:13:48 +0200", "New", "monte@kuphal.biz", "{\"email\"=>\"brandon@williamsonsporer.org\... \"last_update\"=>\"2019-09-16T22:13:48.752+02:00\", \"other_activities\"=>\"forbidden websites\"}"]
   the missing elements were:      ["2019-06-17 22:13:48 +0200,New,monte@kuphal.biz,\"{\"\"email\"\"=>\"\"jeanna@schinner.io\"\", \"\"ro...=>\"\"2019-09-16T22:13:48.752+02:00\"\", \"\"other_activities\"\"=>\"\"forbidden websites\"\"}\"\n"]
   the extra elements were:        ["2019-06-17 22:13:48 +0200", "New", "monte@kuphal.biz", "{\"email\"=>\"brandon@williamsonsporer.org\... \"last_update\"=>\"2019-09-16T22:13:48.752+02:00\", \"other_activities\"=>\"forbidden websites\"}"]

步驟1:為AdminLogData創建工廠

使用gem factory_botfaker結合使用,您將能夠為測試生成偽造的AdminLogData對象。

步驟2:編寫測試

在測試中,您更有可能要測試CSV行是否具有正確的數據,而不是該類收到“ <<”消息。 例如,它看起來可能像這樣:

RSpec.describe AdminLogData::CsvAdminLogGenerator do
  subject(:csv_file) { described_class.new(start_date, end_date).call }

  let(:start_date) { 3.months.ago }
  let(:end_date) { 2.months.ago }

  let(:admin_log_data) { FactoryBot.create(:admin_log_data, created_at: 3.months.ago) }

  before { admin_log_data }

  it 'creates CSV file with proper value' do
    expect(csv_file.to_a[1]).to match_array(CSV.generate_line([
      admin_log_data.created_at
      admin_log_data.action_type
      admin_log_data.admin_email
      admin_log_data.new_data      
    ]))
  end
end

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM