Comments (5)
I've not had need to use the delayed extensions kit in Sidekiq so haven't given this any thought up to now.
FYI from looking at some of the Sidekiq code there are comments that using the delayed methods are discouraged anyway due to serialization of the entire object to JSON.
However, if I read Sidekiq's source correctly, this should be testable with the current matchers (don't hold me to that).
Scanning over the extensions directory in Sidekiq's source, everything hangs round the Proxy class and it's method_missing
method. The end game appears to be the job enqueued via the usual #client_push
method but with some additional arguments added (most importantly the name of the method being called). I've not looked any further but there must be logic in Sidekiq that looks at arguments and calls the relevant method when the job is invoked.
So you should be able check a job in enqueued correctly and the expected arguments (You'll have to take a peek to see what those arguments are). As for the method being called, I'd test that the job is enqueued as expected (as above) and then test the method itself separately (else your testing that Sidekiq is actually performing it's job correctly which is already tested in Sidekiq itself).
from rspec-sidekiq.
It's discouraged to use active_record extension. Using class methods actually will not have any serialization problem as long as the arguments are plain.
I'm actually interested in testing if arguments are correctly passed in, using have_enqueued_job. Currently I can only test if the size of the DelayClass has changed using Sidekiq::Extensions::DelayedClass.jobs.
Using have_enqueud_job on Sidekiq::Extensions::DelayedClass gives me:
[["---\n- !ruby/class 'EmailListManager'\n- :add_user_to_list\n- - 1\n - free\n"]]
when I called EmailListManager.delay.add_user_to_lis(1, 'free')
I'll look into how this argument get parsed.
from rspec-sidekiq.
Did you get any further with this?
from rspec-sidekiq.
Hi Phil,
I realized that It's not very readable to test Sidekiq::Extensions::DelayedClass. So I wrote a simple dsl to generate sidekiq job class instead.
from rspec-sidekiq.
I've got some helper methods for testing the delay class methods. Will create a pull request.
from rspec-sidekiq.
Related Issues (20)
- be_retryable not using global settings HOT 2
- Checking for time has a different format expectation HOT 1
- has_enqueued_sidekiq_job is not matching even though they are identical HOT 7
- Disable all sidekiq jobs for testing HOT 1
- Block syntax `enqueue_sidekiq_job` matcher HOT 8
- Issue with yaml safe loading (psych gem) HOT 2
- `be_delayed` without expected_arguments never matches HOT 4
- RSpec::Sidekiq::NullStatus is missing pending count
- Using ActiveJob::Base with sidekiq_options raises an error HOT 5
- difference in DST handling between Sidekiq's `perform_in` and `have_enqueued_sidekiq_job`
- How to expect to have_enqueued_sidekiq_job with specific queue? - [setting queue name at runtime] HOT 1
- Does this gem need a new owner? HOT 17
- Null Object method missing for Null Batch masks NoMethod errors
- Support Sidekiq 7 and deprecate be_delayed matcher
- Potentially unintentional breaking change in 4.0 with Symbol in argument matchers? HOT 15
- Potentially unintentional breaking change in 4.0.2 with Symbol in argument matchers? (Part 2) HOT 6
- NameError: uninitialized constant RSpec::Matchers::Composable HOT 5
- Match on custom context HOT 1
- feature request: negative matchers HOT 1
- feature suggestion: optional context tag for `sidekiq_retries_exhausted` HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from rspec-sidekiq.