Research
Security News
Quasar RAT Disguised as an npm Package for Detecting Vulnerabilities in Ethereum Smart Contracts
Socket researchers uncover a malicious npm package posing as a tool for detecting vulnerabilities in Etherium smart contracts.
Top up your Jasmine spies with better fake calls.
Motivated by the fact that using spies in Jasmine requires a lot of boilerplate to perform different actions depending on provided arguments.
Currently supports Jasmine 2 only. Heavily influenced by the Mockito library for Java.
Turn this...
spy.and.callFake = function(arg) {
if (arg === 'something') {
return 'a value';
} else if (arg === 'something else') {
return 'a different value';
} else {
throw new Error('some error');
}
};
... into this
when(spy).isCalled.thenThrow(new Error('some error'));
when(spy).isCalledWith('something').thenReturn('a value');
when(spy).isCalledWith('something else').thenReturn('a different value');
###Installation
The easiest way to install saywhen
is via npm. Simply run npm install saywhen
in your project directory.
###Usage
Require Say When as a normal module
var when = require('saywhen');
var spy = jasmine.createSpy('foo');
Make a spy return a value when called with a specific argument
when(spy).isCalledWith('foo').thenReturn('bar');
Mix default handlers and specific handlers
when(spy).isCalled.thenReturn(1);
when(spy).isCalledWith('two').thenReturn(2);
spy(); // => 1
spy('bar'); // => 1
spy('two'); // => 2
Make a spy call a particular function, when called with a specific argument
when(spy).isCalledWith('bar').then(function(arg) {
// Do something with arg
});
Make a spy throw an error
when(spy).isCalledWith('baz').thenThrow(new Error());
Works with jasmine.any & jasmine.objectContaining
when(spy).isCalledWith(jasmine.any(String)).thenReturn("string!");
when(spy).isCalledWith(jasmine.objectContaining({
foo : "bar"
})).thenReturn("object!");
spy('abc'); // => string!
spy({ foo : "bar" }); // => object!
Multiple callbacks can be added and will be executed in order
when(spy).isCalled.thenReturn(1)
.thenReturn(2)
.thenReturn(3)
.thenThrow(new Error('eof'));
spy(); // => 1
spy(); // => 2
spy(); // => 3
spy(); // Throws error
Use captors to capture argument values
var captor = when.captor();
when(spy).isCalledWith(jasmine.any(String), captor);
spy("foo", 123);
spy("foo", 456);
spy(null, 789);
captor.values(); // => [123, 456]
captor.latest; // => 456 (last value)
Captors can also wrap matchers, to allow only capture specific arguments
var captor = when.captor(jasmine.any(Number));
when(spy).isCalledWith(captor).then(function(arg) {
return arg * 2;
});
spy(2); // => 4
spy(3); // => 6
spy("foo") // => undefined (doesn't match)
captor.values(); // => [2, 3]
captor.latest; // => 3
###Contributing
Say When is an open source project, maintained by Push Technology. Issues and pull requests are welcomed.
Tests can be run by installing a dev dependencies with npm install
and then running npm test
###License
Licensed under the Apache 2.0 license. See LICENSE.txt.
FAQs
Better spy fake calls for Jasmine
We found that saywhen demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer 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.
Research
Security News
Socket researchers uncover a malicious npm package posing as a tool for detecting vulnerabilities in Etherium smart contracts.
Security News
Research
A supply chain attack on Rspack's npm packages injected cryptomining malware, potentially impacting thousands of developers.
Research
Security News
Socket researchers discovered a malware campaign on npm delivering the Skuld infostealer via typosquatted packages, exposing sensitive data.