stompgem / stomp

A ruby gem for sending and receiving messages from a Stomp protocol compliant message queue. Includes: failover logic, ssl support.
http://stomp.github.com
Apache License 2.0
152 stars 80 forks source link

rspec3 - doubles or partial doubles from rspec-mocks outside .... #164

Open traylenator opened 4 years ago

traylenator commented 4 years ago

With:

stomp-1.4.9

ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-linux]

$ rspec --version
RSpec 3.8
  - rspec-core 3.8.2
  - rspec-expectations 3.8.4
  - rspec-mocks 3.8.1
  - rspec-support 3.8.2

This results in:

$ rspec --fail-fast spec/client_spec.rb 
RSpec version: 3.8.0
#<Thread:0x000055a54123d138@/home/straylen/pkgs/rubygem-stomp/stomp-1.4.9/lib/client/utils.rb:193 run> terminated with exception (report_on_exception is true):
Traceback (most recent call last):
    9: from /home/straylen/pkgs/rubygem-stomp/stomp-1.4.9/lib/client/utils.rb:194:in `block in start_listeners'
    8: from /home/straylen/pkgs/rubygem-stomp/stomp-1.4.9/lib/client/utils.rb:194:in `loop'
    7: from /home/straylen/pkgs/rubygem-stomp/stomp-1.4.9/lib/client/utils.rb:195:in `block (2 levels) in start_listeners'
    6: from /usr/share/gems/gems/rspec-mocks-3.8.1/lib/rspec/mocks/test_double.rb:102:in `method_missing'
    5: from /usr/share/gems/gems/rspec-mocks-3.8.1/lib/rspec/mocks/proxy.rb:202:in `raise_unexpected_message_error'
    4: from /usr/share/gems/gems/rspec-mocks-3.8.1/lib/rspec/mocks/error_generator.rb:50:in `raise_unexpected_message_error'
    3: from /usr/share/gems/gems/rspec-mocks-3.8.1/lib/rspec/mocks/error_generator.rb:311:in `__raise'
    2: from /usr/share/gems/gems/rspec-mocks-3.8.1/lib/rspec/mocks/error_generator.rb:327:in `notify'
    1: from /usr/share/gems/gems/rspec-support-3.8.2/lib/rspec/support.rb:106:in `notify_failure'
/usr/share/gems/gems/rspec-support-3.8.2/lib/rspec/support.rb:97:in `block in <module:Support>': #<Double "connection"> received unexpected message :receive with (no args) (RSpec::Mocks::MockExpectationError)
.#<Thread:0x000055a54150bd60@/home/straylen/pkgs/rubygem-stomp/stomp-1.4.9/lib/client/utils.rb:193 run> terminated with exception (report_on_exception is true):
Traceback (most recent call last):
    6: from /home/straylen/pkgs/rubygem-stomp/stomp-1.4.9/lib/client/utils.rb:194:in `block in start_listeners'
    5: from /home/straylen/pkgs/rubygem-stomp/stomp-1.4.9/lib/client/utils.rb:194:in `loop'
traylenator commented 4 years ago

Looks like:

https://relishapp.com/rspec/rspec-mocks/v/3-6/docs/basics/scope#cannot-create-doubles-in-a-%60before(:context)%60-hook

gmallard commented 4 years ago

I will try and look at this during the coming weekend.

However, if you have a fix I would appreciate a PR.

gmallard commented 4 years ago

I confess rspec tests are not a strong skill.

I could use some help figuring this out.

traylenator commented 4 years ago

I had a quick look the other day and got as far as working out it was not trivial.

sudeeptarlekar commented 4 years ago

How can I mock Stomp client in application? Currently I am using double to mock Stomp and methods to it. Is this correct way of testing or is there any better approach available?

gmallard commented 4 years ago

If mocks work for you, then it is perfectly fine to use them.

I personally do not test the gem using rspec/mocks - I run unit tests against live brokers.

I do not believe that mocks can ever approach what you will see a live running broker actually do.

The gem unit tests are run against: