Agile Web Development Rails 5 test failures - ruby-on-rails

I just finished creating the Depot app from the Agile Web Development with Rails 5 textbook. For some reason, I am getting errors & failures when I run 'rails test'. Can someone explain why this is happening?
My Github repository is here: https://github.com/christopheragnus/Agile_Web_Development_with_Rails_5
Christophers-MacBook-Pro-3:depot Agnus$ rails test
Running via Spring preloader in process 45997
Run options: --seed 52040
# Running:
..............F
Failure:
LineItemsControllerTest#test_should_create_line_item [/Users/Agnus/Dropbox/CA/AgileWebDevelopment/depot/test/controllers/line_items_controller_test.rb:25]:
<Your Cart> expected but was
<>..
Expected 0 to be >= 1.
bin/rails test test/controllers/line_items_controller_test.rb:18
..E
Error:
OrderMailerTest#test_shipped:
NameError: undefined local variable or method `login_url' for #<OrderMailerTest:0x007ff7b60cc410>
Did you mean? login_as
test/test_helper.rb:12:in `login_as'
test/test_helper.rb:20:in `setup'
bin/rails test test/mailers/order_mailer_test.rb:12
E
Error:
OrderMailerTest#test_received:
NameError: undefined local variable or method `login_url' for #<OrderMailerTest:0x007ff7b6058880>
Did you mean? login_as
test/test_helper.rb:12:in `login_as'
test/test_helper.rb:20:in `setup'
bin/rails test test/mailers/order_mailer_test.rb:4
E
Error:
AdminControllerTest#test_should_get_index:
NameError: undefined local variable or method `admin_index_url' for #<AdminControllerTest:0x007ff7b4ca8880>
test/controllers/admin_controller_test.rb:5:in `block in <class:AdminControllerTest>'
bin/rails test test/controllers/admin_controller_test.rb:4
...........................
Finished in 5.740751s, 8.1871 runs/s, 14.4580 assertions/s.
47 runs, 83 assertions, 1 failures, 3 errors, 0 skips

The undefined errors mean just that: you are calling "login_url" but rails cannot find it anywhere. If you simply copy pasted code from the book you should go to the section where they create this helper file and see where they defined the login_url.
The test failure, opposed to the error, is that it is expecting an h2 element to exist with the name "Your Cart" but it cannot find it. To debug this, you could either go through the code and make sure all the routing/rerouting is correct and that the views are correctly structured and there's no typos- or run the app and go through what the test is doing and see if the results you are seeing is what is expected. Then- we can go from there.
As a rule of thumb, it is good to get into the habit of googling errors which can help give you an idea of where to troubleshoot the issues in your project.

Related

Full backtrace for Omniauth error in testing enviroment

When running an automated test with a omniauth mock, I get:
Run options: -b --seed 58490
# Running:
D, [2023-02-14T18:24:28.454047 #7345] DEBUG -- omniauth: (github) Setup endpoint detected, running now.
E, [2023-02-14T18:24:28.457195 #7345] ERROR -- omniauth: (github) Authentication failure! undefined method `settings_object' for nil:NilClass: NoMethodError, undefined method `settings_object' for nil:NilClass
F
Failure:
Sessions::OmniauthControllerTes#test_should_create_a_github_session [/opt/web/test/controllers/sessions/omniauth_controller_test.rb:13]:
"Session.count" didn't change by 1.
Expected: 1
Actual: 0
rails test test/controllers/sessions/omniauth_controller_test.rb:10
Finished in 2.899824s, 0.3448 runs/s, 0.3448 assertions/s.
1 runs, 1 assertions, 1 failures, 0 errors, 0 skips
Even with -b, I don't get a backtrace for "Authentication failure!". I'm assuming this is either because:
Omniauth is catching the error
The testing environment is simulating a second http connection and this error is happening in that second connection
I've looked in log/test.log. I don't see any clues where this error is happening.
How to I get a backtrace for the "Authentication failure!" error so I know where to put a debugger call and further inspect?
I was able to find the location where to put the debugger call by running in the container:
$ grep 'Authentication failure!' -rin `find / -iname 'gem*' -type d `
But if there's a way for minitest to bring the backgrace into the forefront, I'd like to know it.

Ruby on Rails Testing

I added a controller action using the Rails testing technique, however despite solving all the errors of the new controller action created, a new error regarding the already existing controller actions appeared. Could anyone have an idea of how to go about it? This is the error I'm receiving on my terminal:
Error:
StaticPagesControllerTest#test_should_get_help:
ActionView::Template::Error: Permission denied # rb_file_s_rename - (C:/Users/ADMIN/Desktop/sample_app/tmp/cache/assets/sprockets/v4.0.0/Ah/AhRKfpIltIZZsQQ3DW_RRap2qgrZpmLfGMuTS7wKLvE.cache.16460.9436.19047, C:/Users/ADMIN/Desktop/sample_app/tmp/cache/assets/sprockets/v4.0.0/Ah/AhRKfpIltIZZsQQ3DW_RRap2qgrZpmLfGMuTS7wKLvE.cache)
app/views/layouts/application.html.erb:9
test/controllers/static_pages_controller_test.rb:10:in `block in <class:StaticPagesControllerTest>'
The solution was I changed this code in the test_helper.rb from:
parallelize(workers: :number_of_processors, with: :threads)
To:
parallelize(workers: 1)
Its works!

ROR unit test error: SyntaxError: (erb):18:

I have a ROR project and all the unit tests are failing with the same error as listed below. To figure out the cause I created an empty test case, the code is follows.
require 'test_helper'
class UsersEditTest < ActionDispatch::IntegrationTest
test "the truth" do
assert true
end
end
When the run the test with "rake test TEST=test/integration/users_edit_test.rb" command I get the following error
1) Error:
UsersEditTest#test_the_truth:
SyntaxError: (erb):18: syntax error, unexpected keyword_end, expecting end-of-input
; end ; _erbout.force_encoding(__ENCODING__)
^
1 runs, 0 assertions, 0 failures, 1 errors, 0 skips
Not sure what is missing in the project, I have other test projects where unit tests just fine.
It is probably not connected to tests, you have error in view (erb file).
Check if everything is ok in views, especially <%= tags

Rails extending `rake test` to incorporate custom behaviour

I've got a bunch of files in test/policies, and I've tried to enhance rake test like so:
# lib/tasks/test.rake
namespace :test do
desc "Test Pundit policies"
Rake::TestTask.new(:policies) do |t|
t.libs << 'test'
t.pattern = 'test/policies/*_test.rb'
end
end
Rake::Task["test"].enhance do
Rake::Task["test:policies"].invoke
end
It works great if I run bin/rake test:all, but bin/rake test now only runs the policy tests, and none of my others.
Can anyone advise what I am doing wrong here? In case it's not clear, I want rake test to run all my tests, just like it used to.
UPDATE
Actually, it's kind of working now, but I've noticed that my functional, unit and integration tests do run now, but only if the policy tests all pass. If any of the policy tests fail, then the rest of my test suite fails to run.
And I don't like the output, notice how there are two blocks of test output below:
[vagrant#vagrant-centos-6-4 vagrant]$ bin/rake test
Run options: --seed 54880
# Running:
.........................
Finished in 0.584530s, 42.7694 runs/s, 56.4556 assertions/s.
25 runs, 33 assertions, 0 failures, 0 errors, 0 skips
Run options: --seed 19900
# Running:
.........................................................
Finished in 4.132299s, 51.0612 runs/s, 128.9839 assertions/s.
I'd prefer if the policy tests output was merged into the same output block as that from my other tests. Any ideas, or is this as good as it's going to get?
Someone else asked the same question and I answered it for them. The solution in my case was to change my code from:
Rake::TestTask.new(:policies) do |t|
to:
Rails::TestTask.new(:policies) do |t|
It just works, and fixes all the issues I was having.

Ruby on Rails rspec runs tests succesfully, but Guard + Spork doesn't find methods for Devise

I tried to add a few tests to my Ruby on Rails -application. When I run them on command line using command rspec, it runs fine:
Finished in 0.87603 seconds 3 examples, 0 failures
When starting guard, it runs them fine for the first time as well. It gives this kind of message even though I'm not using minitest:
/.rvm/gems/ruby-2.0.0-p353/gems/minitest-4.7.5/lib/minitest/unit.rb:1037:in `block in process_args': invalid option: --drb (OptionParser::InvalidOption)
I haven't configured to use MiniTest, so I guess there might be something wrong with my configuration files?
However, when I make changes to my user_pages_spec.rb and save, which triggers Guard to run the tests, it gives this kind of error:
Running tests with args ["--drb", "-f", "progress", "-r", "/home/.rvm/gems/ruby-2.0.0-p353/gems/guard-rspec-2.5.0/lib/guard/rspec/formatter.rb", "-f", "Guard::RSpec::Formatter", "--failure-exit-code", "2", "spec/requests/user_pages_spec.rb"]...
Failures:
1)
User pages signup page
Failure/Error: before { visit new_user_registration_path }
ActionView::Template::Error:
undefined method `devise_error_messages!' for #<#<Class:0x00000006b18248>:0x00000006b226f8>
2)
User pages signup page
Failure/Error: before { visit new_user_registration_path }
ActionView::Template::Error:
undefined method `devise_error_messages!' for #<#<Class:0x00000006b18248>:0x000000066de560>
Basicly not finding those methods running the same tests the second time. Tests I run for another page which contains only static content works fine.
Here are some files:
Gemfile: http://pastebin.com/bHgxXYZ3
Guardfile: http://pastebin.com/Rnhz2tsJ
spec_helper: http://pastebin.com/Jpvu3k2Q
.rspec: http://pastebin.com/B0bzmE0n
If something's missing, just give me a note. Thanks for helping :)
Do you also have these errors when starting spork and then running your specs (without Guard)?
For the MiniTest error message, be sure that you don't have a test/ folder in your project.

Resources