No application found to handle ...(Launchy::ApplicationNotFoundError) - ruby-on-rails

I have installed capybara-screenshot gem to save the screenshot and in cucumber step definition i called screenshot_and_open_image but i got error that says:
No application found to handle
'application_path/public/tmp/screenshot_2014-06-18-11-07-39.063.png'
(Launchy::ApplicationNotFoundError)
Can anybody assist me?

Try to use Capybara::Screenshot.screenshot_and_open_image. And if you have a test javascript please specify js: true for him.
it "my test", js: true do
blablabla
end

Related

Not able to execute any test case in rspec

I am really confused about this Psych BadAlias error.
I have tried everything but not able to debug this error.
When i am executing my test case i am getting this error
Failure/Error: #st.fetch(o.anchor) { raise BadAlias, "Unknown alias: #{o.anchor}" }
Psych::BadAlias:
Unknown alias: 2
But before it was working perfectly fine.
This is my fixtures file
workers.yml
Worker_1:
name: Hello
preferred_first_name: First
preferred_last_name: Last
assignment: Assignemnt_1
talent: Ruby_development
Any kind of Help is appreciated!
Thanks
A Psych::BadAlias exception will be raised if the yaml contains aliases but the aliases keyword argument is set to false.
Please check your yaml files. The error got raised from here. For more details please refer here
I solved it, as there was just a syntax error in yaaml file.
we canot use "p-r-a-t-i-k" we have to use "p_r_a_t_i_k"

CableReady (Rails) Basic case giving mystifying error message

cable_ready 4.5.0
rails 6.1.4.1
ruby 3.0.2p107
This is a simple example from the basic tutorial (https://www.youtube.com/watch?v=F5hA79vKE_E) I suspect the error I am getting is because either cable_ready or rails evolved a little and created a tiny incompatibility.
I get this error in the JS console:
It is triggered when in my controller I ask cable ready to:
cable_ready["timeline"].console_log(message: "***** cable ready post created")
Which leads to my timeline_channel to:
received(data) {
console.log("******** Received data:", data.operations)
if (data.cableReady) CableReady.perform(data.operations)
}
My interpretation is perform causes this line in cable_ready.js line 13:
operations.forEach(function (operation) {
if (!!operation.batch) batches[operation.batch] = batches[operation.batch] ? ++batches[operation.batch] : 1;
});
Is finding something in the received data that it doesn't like.
That's where my trail ends. Can someone see what I am doing wrong, or tell me what other code you'd like me to include?
Solution: downgrade the version of the cable_ready javascript library.
I previously (maybe a year ago) did this tutorial using CableReady 4.5, Ruby 2.6.5 and Rails 6.0.4 and it worked like a charm back then as well as today.
But today, I tried this tutorial again on a duplicate project--same versions of CR, Ruby, and Rails and now I get java console errors similar to yours.
TypeError: undefined is not a function (near '...operations.forEach...')
perform -- cable_ready.js:13
received -- progress_bar_channel.js:8
I looked at the output of yarn list and saw that cable_ready was version 5.0.0-pre8 on the bad project and it was 5.0.0-pre1 on the good project. The downgrade could be accomplished with yarn add cable_ready#^5.0.0-pre1 in the bad project folder and now both projects work.
FYI for other newbies like me trying to understand how CableReady works: This tutorial gives another example of CableReady, and was also fixed the same way.

rspec have_selector with div and i elements are not working

I have upgraded my capybara from 2.x to capybara 3.13.x noticed that
expect(html).to have_selector("div", "result-item-area")
starts failing tried various fix but nothing helped me and unable to figure out the reason for the below failure
Unused parameters passed to Capybara::Queries::SelectorQuery : ["result-item-area"]
If you want to check wheather div with class result-item-area exists, you should use following code:
expect(html).to have_selector('div', class: 'result-item-area')
Or
expect(html).to have_selector('div.result-item-area')
Alternatively for id:
expect(html).to have_selector('div', id: 'result-item-area')
Or
expect(html).to have_selector('div#result-item-area')

Error capybara js: true

Im having problems when i try to config my capybara test to respond js. This is my test:
test "creating_expense", js: true do
visit expenses_path
click_link('New Expense')
end
The error is:
/var/lib/gems/2.3.0/gems/activesupport-5.0.6/lib/active_support/testing/declarative.rb:11:in `test': wrong number of arguments (given 2, expected 1) (ArgumentError)
The default minitest test method doesn't support metadata on tests (the examples you're copying were probably using RSpec). To swap to the JS driver you need to change the current_driver in a setup blog as shown in the Capybara README - https://github.com/teamcapybara/capybara#using-capybara-with-minitest
If you want to add support for metadata on tests you can look at the minutest-minidata gem - https://github.com/wojtekmach/minitest-metadata#example-with-capybara

Activesupport / Multi json: "Did not recognize your adapter specification"

I have a Ruby 1.9.3 / Rails 3.1 project with the following in the gemfile:
gem 'rails', '3.1.12'
gem 'json'
gem 'multi_json', '1.7.7'
That version of rails sets activesupport to 3.1.12 as well. I'm not sure what the exact cause of the problem is, but when running bundle exec rake test, I got the error:
/home/user/.gem/ruby/1.9.3/gems/multi_json-1.7.7/lib/multi_json.rb:121:in 'rescue in load_adapter': Did not recognize your adapter specification. (ArgumentError)
...
(more stack trace, including activesupport methods)
Fortunately I found a solution! See below.
Edit: My original answer is outdated and incorrect; read it if you please, but please read the updated information at the bottom.
After viewing a ton of other questions such as these ones:
OmniAuth Login With Twitter - "Did not recognize your adapter specification." Error
Capistrano deploy: "Did not recognize your adapter specification" during assets:precompile
https://github.com/intridea/multi_json/issues/132
I hadn't found a solution, so I dove into the library and determined that load_adapter was receiving the parameter "JSONGem". The alias was failing, and the method attempted to load
/home/user/.gem/ruby/1.9.3/gems/multi_json-1.7.7/lib/multi_json/adapters/JSONGem.rb
This file doesn't exist, but .../json_gem.rb does exist! So I modified load adapter as follows:
def load_adapter(new_adapter)
# puts "new_adapter: #{new_adapter}" # Debugging
# puts "new_adapater.class: #{new_adapter.class}" # Debugging
case new_adapter
when String, Symbol
new_adapter = ALIASES.fetch(new_adapter.to_s, new_adapter)
new_adapter = "json_gem" if new_adapter =~ /^jsongem$/i # I added this line
# puts "final adapter: #{new_adapter}" # debugging
require "multi_json/adapters/#{new_adapter}"
klass_name = new_adapter.to_s.split('_').map(&:capitalize) * ''
MultiJson::Adapters.const_get(klass_name)
when NilClass, FalseClass
load_adapter default_adapter
when Class, Module
new_adapter
else
raise NameError
end
rescue NameError, ::LoadError
raise ArgumentError, 'Did not recognize your adapter specification.'
end
This fixed the problem for me. It's probably not an optimal solution (ideally I would understand WHY the ALIASES.fetch failed, if that is indeed what happened, and fix that), but if your problem is similar then hopefully this quick fix can help.
Update
It's not viable for deployability reasons to modify someone else's gem. Fortunately I found the root cause of the problem. In project_root/config/initializers/security_patches.rb, we had the line
ActiveSupport::JSON.backend = "JSONGem"
This was the recommended fix to a security bug in older versions of rails. Now that we are on a newer version of rails (i.e, > 3.0), we can simply replace "JSONGem" with "json_gem" (which is what my original modification was doing, in a roundabout way) and not worry about the security issue.

Resources