The old style of merging all of a function's variable declarations into a single statement made some sense back in the days of var, but there's no reason to keep doing it now that we use const and let.
120 lines
4.1 KiB
JavaScript
120 lines
4.1 KiB
JavaScript
describe('Custom Spy Strategies (Integration)', function() {
|
|
let env;
|
|
|
|
beforeEach(function() {
|
|
env = new privateUnderTest.Env();
|
|
env.configure({ random: false });
|
|
});
|
|
|
|
afterEach(function() {
|
|
env.cleanup_();
|
|
});
|
|
|
|
it('allows adding more strategies local to a suite', async function() {
|
|
const plan = jasmine.createSpy('custom strategy plan').and.returnValue(42);
|
|
const strategy = jasmine.createSpy('custom strategy').and.returnValue(plan);
|
|
|
|
env.describe('suite defining a custom spy strategy', function() {
|
|
env.beforeAll(function() {
|
|
env.addSpyStrategy('frobnicate', strategy);
|
|
});
|
|
|
|
env.it('spec in the suite', function() {
|
|
const spy = env.createSpy('something').and.frobnicate(17);
|
|
expect(spy(1, 2, 3)).toEqual(42);
|
|
expect(strategy).toHaveBeenCalledWith(17);
|
|
expect(plan).toHaveBeenCalledWith(1, 2, 3);
|
|
});
|
|
});
|
|
|
|
env.it('spec without custom strategy defined', function() {
|
|
expect(env.createSpy('something').and.frobnicate).toBeUndefined();
|
|
});
|
|
|
|
const result = await env.execute();
|
|
expect(result.overallStatus).toEqual('passed');
|
|
});
|
|
|
|
it('allows adding more strategies local to a spec', async function() {
|
|
const plan = jasmine.createSpy('custom strategy plan').and.returnValue(42);
|
|
const strategy = jasmine.createSpy('custom strategy').and.returnValue(plan);
|
|
|
|
env.it('spec defining a custom spy strategy', function() {
|
|
env.addSpyStrategy('frobnicate', strategy);
|
|
const spy = env.createSpy('something').and.frobnicate(17);
|
|
expect(spy(1, 2, 3)).toEqual(42);
|
|
expect(strategy).toHaveBeenCalledWith(17);
|
|
expect(plan).toHaveBeenCalledWith(1, 2, 3);
|
|
});
|
|
|
|
env.it('spec without custom strategy defined', function() {
|
|
expect(env.createSpy('something').and.frobnicate).toBeUndefined();
|
|
});
|
|
|
|
const result = await env.execute();
|
|
expect(result.overallStatus).toEqual('passed');
|
|
});
|
|
|
|
it('allows using custom strategies on a per-argument basis', async function() {
|
|
const plan = jasmine.createSpy('custom strategy plan').and.returnValue(42);
|
|
const strategy = jasmine.createSpy('custom strategy').and.returnValue(plan);
|
|
|
|
env.it('spec defining a custom spy strategy', function() {
|
|
env.addSpyStrategy('frobnicate', strategy);
|
|
const spy = env
|
|
.createSpy('something')
|
|
.and.returnValue('no args return')
|
|
.withArgs(1, 2, 3)
|
|
.and.frobnicate(17);
|
|
|
|
expect(spy()).toEqual('no args return');
|
|
expect(plan).not.toHaveBeenCalled();
|
|
expect(spy(1, 2, 3)).toEqual(42);
|
|
expect(plan).toHaveBeenCalledWith(1, 2, 3);
|
|
});
|
|
|
|
env.it('spec without custom strategy defined', function() {
|
|
expect(env.createSpy('something').and.frobnicate).toBeUndefined();
|
|
});
|
|
|
|
const result = await env.execute();
|
|
expect(result.overallStatus).toEqual('passed');
|
|
});
|
|
|
|
it('allows multiple custom strategies to be used', async function() {
|
|
const plan1 = jasmine.createSpy('plan 1').and.returnValue(42);
|
|
const strategy1 = jasmine.createSpy('strat 1').and.returnValue(plan1);
|
|
const plan2 = jasmine.createSpy('plan 2').and.returnValue(24);
|
|
const strategy2 = jasmine.createSpy('strat 2').and.returnValue(plan2);
|
|
const specDone = jasmine.createSpy('specDone');
|
|
|
|
env.beforeEach(function() {
|
|
env.addSpyStrategy('frobnicate', strategy1);
|
|
env.addSpyStrategy('jiggle', strategy2);
|
|
});
|
|
|
|
env.it('frobnicates', function() {
|
|
plan1.calls.reset();
|
|
plan2.calls.reset();
|
|
const spy = env.createSpy('spy').and.frobnicate();
|
|
expect(spy()).toEqual(42);
|
|
expect(plan1).toHaveBeenCalled();
|
|
expect(plan2).not.toHaveBeenCalled();
|
|
});
|
|
|
|
env.it('jiggles', function() {
|
|
plan1.calls.reset();
|
|
plan2.calls.reset();
|
|
const spy = env.createSpy('spy').and.jiggle();
|
|
expect(spy()).toEqual(24);
|
|
expect(plan1).not.toHaveBeenCalled();
|
|
expect(plan2).toHaveBeenCalled();
|
|
});
|
|
|
|
env.addReporter({ specDone: specDone });
|
|
const result = await env.execute();
|
|
expect(result.overallStatus).toEqual('passed');
|
|
expect(specDone.calls.count()).toBe(2);
|
|
});
|
|
});
|