
Security News
/Research
Wallet-Draining npm Package Impersonates Nodemailer to Hijack Crypto Transactions
Malicious npm package impersonates Nodemailer and drains wallets by hijacking crypto transactions across multiple blockchains.
RR is a test double framework for Ruby that features a rich selection of double techniques and a terse syntax.
# Stub a method to return nothing
stub(object).foo
stub(MyClass).foo
# Stub a method to always return a value
stub(object).foo { 'bar' }
stub(MyClass).foo { 'bar' }
# Stub a method to return a value when called with certain arguments
stub(object).foo(1, 2) { 'bar' }
stub(MyClass).foo(1, 2) { 'bar' }
# Create an expectation on a method
mock(object).foo
mock(MyClass).foo
# Create an expectation on a method and stub it to always return a value
mock(object).foo { 'bar' }
mock(MyClass).foo { 'bar' }
# Create an expectation on a method with certain arguments and stub it to return
# a value when called that way
mock(object).foo(1, 2) { 'bar' }
mock(MyClass).foo(1, 2) { 'bar' }
# RSpec
stub(object).foo
expect(object).to have_received.foo
# Test::Unit
stub(object).foo
assert_received(object) {|o| o.foo }
# Intercept a existing method without completely overriding it, and create a
# new return value from the existing one
stub.proxy(object).foo {|str| str.upcase }
stub.proxy(MyClass).foo {|str| str.upcase }
# Do the same thing except also create an expectation
mock.proxy(object).foo {|str| str.upcase }
mock.proxy(MyClass).foo {|str| str.upcase }
# Intercept a class's new method and define a double on the return value
stub.proxy(MyClass).new {|obj| stub(obj).foo; obj }
# Do the same thing except also create an expectation on .new
mock.proxy(MyClass).new {|obj| stub(obj).foo; obj }
# Stub a method on an instance of MyClass when it is created
any_instance_of(MyClass) do |klass|
stub(klass).foo { 'bar' }
end
# Another way to do this which gives you access to the instance itself
stub.proxy(MyClass).new do |obj|
stub(obj).foo { 'bar' }
end
NOTE: If you want to use RR with test-unit, use test-unit-rr. You don't need to read the following subsections.
For minimal setup, RR looks for an existing test framework and then hooks itself into it. Hence, RR works best when loaded after the test framework that you are using is loaded.
If you are using Bundler, you can achieve this by specifying the dependency on
RR with require: false
; then, require RR directly following your test
framework.
Here's what this looks like for different kinds of projects:
require 'your/test/framework'
require 'rr'
# Gemfile
gem 'rr', require: false
# test helper
require 'your/test/framework'
require 'rr'
# Gemfile
group :test do
gem 'rr', require: false
end
# test helper
require File.expand_path('../../config/environment', __FILE__)
require 'your/test/framework' # if you are using something other than MiniTest / Test::Unit
require 'rr'
RR is designed and tested to work against the following Ruby versions:
as well as the following test frameworks:
If you have a question or are having trouble, simply post it as an issue and I'll respond as soon as I can.
Want to contribute a bug fix or new feature to RR? Great! Follow these steps:
master
with a descriptive name.bundle install
.bundle exec rake
.As indicated by the compatibility list above, in order to test support for multiple Ruby versions and environments, there are multiple test suites, and Rake tasks to run these suites. The list of available Rake tasks depends on which version of Ruby you are under, but you can get the full list with:
bundle exec rake -D spec:
To run all the suites, simply say:
bundle exec rake
(Incidentally, this is also the command which Travis runs.)
RR was originally written by Brian Takita. And it was maintained by Elliot Winkler (elliot.winkler@gmail.com). It is currently maintained by Kouhei Sutou (kou@cozmixng.org).
With any development effort, there are countless people who have contributed to making it possible; RR is no exception! You can read the full list of credits here.
RR is available under the MIT license.
FAQs
Unknown package
We found that rr demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 3 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
/Research
Malicious npm package impersonates Nodemailer and drains wallets by hijacking crypto transactions across multiple blockchains.
Security News
This episode explores the hard problem of reachability analysis, from static analysis limits to handling dynamic languages and massive dependency trees.
Security News
/Research
Malicious Nx npm versions stole secrets and wallet info using AI CLI tools; Socket’s AI scanner detected the supply chain attack and flagged the malware.