What does :count actually mean in assert_select?

Hi guys,

I tried reading up the RSPEC Book (Dec 2010) and googled a bit but I
could not find anything.

I’m using Rspec2.

Example:

spec/factories/categories.rb

FactoryGirl.define do
factory :category_intakes, :class => ‘category’ do
name ‘intakes and filters’
description ‘airfilters and etc.’
created_by 1
updated_by 1
end

factory :category_audio, :class => ‘category’ do
name ‘audio’
description ‘in car entertainment’
created_by 1
updated_by 1
end
end

spec/views/categories/index.html.erb

require ‘spec_helper’

describe “categories/index.html.erb” do
before(:each) do
assign( :categories, [
FactoryGirl.create(:category_intakes),
FactoryGirl.create(:category_audio),
]
)
end

it “renders a list of categories” do
render
assert_select “tr>td”, :text => “intakes and filters”.to_s, :count
=> 1
assert_select “tr>td”, :text => “audio”.to_s, :count => 1
end
end

I noticed that the index view spec above passes but when I change the
count to 2, it fails saying that only 1 element is expected.

Question:

  1. what does :count actually mean? Does it mean the total number of
    fixture objects expected?
  2. does the ordering of the rendered fixture items matter
    ( ie. :category_audio is expected before :category_intakes)?

I think i answered my own question. :count refers to the number of
fixture
objects.

The reason why :count => 2 was passing for views index specs is because
2
objects are being mocked and they are identical.

Hence, there are 2 stock tests:

  1. asserts that there are 2

    elements which have the name of ‘Name’
  2. asserts that there are 2

    elements which have the name of
    ‘Description’

    This is what a stock view index spec looks like:
    ---- Stock index spec view ----

    describe “makes/index.html.erb” do
    before(:each) do
    assign(:makes, [
    stub_model(Make,
    :name => “Name”,
    :description => “Description”,
    :created_by => “”,
    :updated_by => “”
    ),
    stub_model(Make,
    :name => “Name”,
    :description => “Description”,
    :created_by => “”,
    :updated_by => “”
    )
    ])
    end

    it “renders a list of makes” do
    render
    # Run the generator again with the --webrat flag if you want to use
    webrat matchers
    assert_select “tr>td”, :text => “Name”.to_s, :count => 2
    # Run the generator again with the --webrat flag if you want to use
    webrat matchers
    assert_select “tr>td”, :text => “Description”.to_s, :count => 2
    end
    end
    ---- Stock index spec view ----