2
Back to Rails Test - Putting Rspec in the Rear View - Test Examples
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
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK