2

Back to Rails Test - Putting Rspec in the Rear View - Test Examples

 1 year ago
source link: https://fuzzyblog.io/blog/rails/2022/06/05/back-to-rails-test-putting-rspec-in-the-rear-view-test-examples.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Back to Rails Test - Putting Rspec in the Rear View - Test Examples

Jun 5, 2022

I find myself building a new application, Cartazzi, and since the "template app" I'm building from uses Rails Test not rspec, I'm back to the past using the native rails testing framework – something I probably last touched by in 2009.

This blog post summarizes different Rails testing examples and is a work in progress as I come up with new examples.

Thinks I Like About Rails Test

  • It is fast
  • Have I mentioned it is fast
  • It is so, so fast
  • It tells you when you write duplicate tests if the test "" block is the same

Things I Dislike About Rails Test

  • Lack of output formatting like rspec's nested documentation
  • The inability to nest tests; yes thoughtbot's matchers may provide this but they are 2+ years out of date and unclear if they are still maintained

Examples

Running a Single Test

rails test test/models/my_model.rb:22

Running All Tests

rails test test/models/my_model.rb

Examining the body of a page at runtime

debugger
response.body[0..250]


debugger
response.body.scan(/FOO/)

Asserting a form exists with different elements

Asserting a row exists within a table

assert_select 'table' do
  assert_select 'tr td', '[email protected]'
end

Asserting a select tag exists within a form

# this would find a select with an id of project_type
assert_select 'select#project_type'

Asserting a text area exists within a form

This assumes that the form do block illustrated above is used.

# this would find a textarea with an id of component_body-input
assert_select 'textarea#component_body-input'

Asserting text exists on an H1 element

assert_selector "h1", text: "Foobar"

Checking a list has 4 elements

assert_select "ol" do |elements|
  elements.each do |element|
    assert_select element, "li", 4
  end
end

Asserting a difference on a database creation operation

assert_difference('LinkType.count') do
  result = LinkType.find_or_create(OpenStruct.new(context: "execution_url", name: "development"))
  assert_equal result.class, LinkType
end

Asserting there should be no difference in database results

test "ProjectType.find_or_create should return a project_type when it already exists" do
  result_create = ProjectType.find_or_create(@name, @file_extension, @component_file)
  assert_no_difference("ProjectType.count") do
    result_find = ProjectType.find_or_create(@name, @file_extension, @component_file)
    assert_equal result_create.id, result_find.id
  end
end

When you get TypeError: no implicit conversion of Integer into String on an assert_difference or assert_no_difference test

It means you are missing the quotes below:

assert_no_difference("ProjectType.count")

Good Links


Posted In: #rails #test #rspec


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK