The project is in a healthy, maintained state
RSpec Xlsx matchers
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Runtime

~> 3.0
 Project Readme

RSpec::XlsxMatchers

Provides rspec matchers for testing xlsx data with roo or caxlsx gems.

Inspired from code originally written by Samuel Trottier.

Optional dependencies

Configure

add config.include RSpec::XlsxMatchers to your RSpec.configure declaration

# spec_helper.rb
RSpec.configure do |config|
  config.include RSpec::XlsxMatchers
  # ...
end

Matchers

have_excel_sheets

Tests that xlsx data contains specific sheets (by name or zero-based index)

subject must be one of the following types:

  • String: file path to an excel file (requires roo gem)
  • File: file path to an excel file (requires roo gem)
  • Roo::Excelx: excel file loaded with roo (requires roo gem)
  • Axlsx::Package: (requires caxlsx gem)
  • Axlsx::Workbook: (requires caxlsx gem)

examples

  it "has a sheet Sheet1" do
    expect(subject).to have_excel_sheets("Sheet1")
  end

  it "has sheets Sheet1 and Sheet2" do
    expect(subject).to have_excel_sheets(%w[Sheet1 Sheet2])
  end

  it "has at least 3 sheets" do
    expect(subject).to have_excel_sheets(2)
  end

  it "has at least 3 sheets and a sheet named Sheet1" do
    expect(subject).to have_excel_sheets([2, "Sheet1"])
  end

have_excel_columns

Tests that a specific sheet contains some columns with specific value on the first row

subject must be one of the following types:

  • String: file path to an excel file (requires roo gem)
  • File: file path to an excel file (requires roo gem)
  • Roo::Excelx: excel file loaded with roo (requires roo gem)
  • Roo::Excelx::Sheet: (requires roo gem)
  • Axlsx::Package: (requires caxlsx gem)
  • Axlsx::Workbook: (requires caxlsx gem)
  • Axlsx::Worksheet: (requires caxlsx gem)

chaining

  • in_sheet(sheet_name): sheet where the data is expected. name (String) or index (Integer)
    • required unless subject is a Roo::Excelx::Sheet or a Axlsx::Worksheet
  • exactly: Match columns in order and fail if extra columns are found

examples

  it "has a Gender and First Name columns in sheet Sheet 1" do
    expect(subject).to have_excel_columns(["Gender", "First Name"]).in_sheet("Sheet1")
  end

  it "has column Last Name in first sheet" do
    expect(subject).to have_excel_columns("Last Name").in_sheet(0)
  end

  it "has columns First Name and Last Name in first sheet, matching exactly" do
    expect(subject).to have_excel_columns(["First Name", "Last Name"]).in_sheet(0).exactly
  end

have_excel_column

Tests that a specific sheet contains columns with specific value on the first row

subject must be one of the following types:

  • String: file path to an excel file (requires roo gem)
  • File: file path to an excel file (requires roo gem)
  • Roo::Excelx: excel file loaded with roo (requires roo gem)
  • Roo::Excelx::Sheet: (requires roo gem)
  • Axlsx::Package: (requires caxlsx gem)
  • Axlsx::Workbook: (requires caxlsx gem)
  • Axlsx::Worksheet: (requires caxlsx gem)

chaining

  • in_sheet(sheet_name): sheet where the data is expected. name (String) or index (Integer)
    • required unless subject is a Roo::Excelx::Sheet or a Axlsx::Worksheet

examples

  it "has a Gender column in sheet Sheet 1" do
    expect(subject).to have_excel_columns("Gender").in_sheet("Sheet1")
  end

  it "has a Last Name column in first sheet" do
    expect(subject).to have_excel_columns("Last Name").in_sheet(0)
  end

have_excel_cells

Tests that a specific row in a specific sheet contains the expected cell values

subject must be one of the following types:

  • String: file path to an excel file (requires roo gem)
  • File: file path to an excel file (requires roo gem)
  • Roo::Excelx: excel file loaded with roo (requires roo gem)
  • Roo::Excelx::Sheet: (requires roo gem)
  • Axlsx::Package: (requires caxlsx gem)
  • Axlsx::Workbook: (requires caxlsx gem)
  • Axlsx::Worksheet: (requires caxlsx gem)

chaining

  • in_sheet(sheet_name): sheet where the data is expected. name (String) or index (Integer, zero based)
    • required unless subject is a Roo::Excelx::Sheet or a Axlsx::Worksheet
  • in_row(row_index): row where the data is expected (row_index: Integer, zero-based)

examples

  it "has John Smith information on second row" do
    expect(subject).to have_excel_cells(["John", "Smith", 24]).in_row(1).in_sheet("Sheet1")
  end

have_excel_empty_row

Tests that a specific row in a specific sheet is empty

subject must be one of the following types:

  • String: file path to an excel file (requires roo gem)
  • File: file path to an excel file (requires roo gem)
  • Roo::Excelx: excel file loaded with roo (requires roo gem)
  • Roo::Excelx::Sheet: (requires roo gem)
  • Axlsx::Package: (requires caxlsx gem)
  • Axlsx::Workbook: (requires caxlsx gem)
  • Axlsx::Worksheet: (requires caxlsx gem)

chaining

  • in_sheet(sheet_name): sheet where the data is expected. name (String) or index (Integer)
    • required unless subject is a Roo::Excelx::Sheet or a Axlsx::Worksheet

examples

  it "has no data on third row" do
    expect(subject).to have_excel_empty_row(2)
  end

have_excel_cell_value

Tests that a cell in a specific column of a specific row from a specific sheet has expected value

subject must be one of the following types:

  • String: file path to an excel file (requires roo gem)
  • File: file path to an excel file (requires roo gem)
  • Roo::Excelx: excel file loaded with roo (requires roo gem)
  • Roo::Excelx::Sheet: (requires roo gem)
  • Axlsx::Package: (requires caxlsx gem)
  • Axlsx::Workbook: (requires caxlsx gem)
  • Axlsx::Worksheet: (requires caxlsx gem)

chaining

  • in_sheet(sheet_name): sheet where the data is expected. name (String) or index (Integer, zero based)
    • required unless subject is a Roo::Excelx::Sheet or a Axlsx::Worksheet
  • in_row(row_index): row where the data is expected (row_index: Integer, zero-based)
  • column(first_row_value): value of the column in the first row

examples

  it "has John in the First Name column of the third row of the first sheet" do
    expect(subject).to have_excel_cell_value("John").in_sheet(0).in_row(2).in_column("First Name")
  end