Files
jasmine/spec/core/matchers/toHaveSpyInteractionsSpec.js
Nito Buendia a8a6577cd7 Replace parameterized test with different expectations
This approach makes it hard to scale and goes against DRY and debuggability vs the previous approach which followed Python parameterized testing, but this was the recommendation of the Jasmine team to keep it consistent with other tests.

Further tests here could be adding other types like Array, Map, WeakMap, Set, WeakSet...
2022-03-17 20:16:22 +08:00

106 lines
3.1 KiB
JavaScript
Executable File

describe('toHaveSpyInteractions', function() {
it('detects spy interactions', function() {
let matcher = jasmineUnderTest.matchers.toHaveSpyInteractions();
let spyObj = jasmineUnderTest
.getEnv()
.createSpyObj('NewClass', ['spyA', 'spyB']);
spyObj.spyA();
let result = matcher.compare(spyObj);
expect(result.pass).toBe(true);
expect(result.message).toContain(
'Expected spy object spies to have been called'
);
});
it('detects multiple spy interactions', function() {
let matcher = jasmineUnderTest.matchers.toHaveSpyInteractions();
let spyObj = jasmineUnderTest
.getEnv()
.createSpyObj('NewClass', ['spyA', 'spyB']);
spyObj.spyA();
spyObj.spyB();
spyObj.spyA();
let result = matcher.compare(spyObj);
expect(result.pass).toBe(true);
expect(result.message).toContain(
'Expected spy object spies to have been called'
);
});
it('detects no spy interactions', function() {
let matcher = jasmineUnderTest.matchers.toHaveSpyInteractions();
let spyObj = jasmineUnderTest
.getEnv()
.createSpyObj('NewClass', ['spyA', 'spyB']);
let result = matcher.compare(spyObj);
expect(result.pass).toBe(false);
expect(result.message).toContain(
'Expected spy object spies to have been called'
);
});
it('ignores non-observed spy object interactions', function() {
let matcher = jasmineUnderTest.matchers.toHaveSpyInteractions();
let spyObj = jasmineUnderTest
.getEnv()
.createSpyObj('NewClass', ['spyA', 'spyB']);
spyObj.otherMethod = function() {};
spyObj.otherMethod();
let result = matcher.compare(spyObj);
expect(result.pass).toBe(false);
expect(result.message).toContain(
'Expected spy object spies to have been called'
);
});
it(`throws error if a non-object is passed`, function() {
let matcher = jasmineUnderTest.matchers.toHaveSpyInteractions();
expect(function() {
matcher.compare(true);
}).toThrowError(Error, /Expected a spy object, but got/);
expect(function () {
matcher.compare(123);
}).toThrowError(Error, /Expected a spy object, but got/);
expect(function () {
matcher.compare('string');
}).toThrowError(Error, /Expected a spy object, but got/);
});
it('throws error if arguments are passed', function() {
let matcher = jasmineUnderTest.matchers.toHaveSpyInteractions();
let spyObj = jasmineUnderTest
.getEnv()
.createSpyObj('NewClass', ['spyA', 'spyB']);
expect(function() {
matcher.compare(spyObj, 'an argument');
}).toThrowError(Error, /Does not take arguments/);
});
it('throws error if spy object has no spies', function() {
let matcher = jasmineUnderTest.matchers.toHaveSpyInteractions();
const spyObj = jasmineUnderTest
.getEnv()
.createSpyObj('NewClass', ['notSpy']);
// Removing spy since spy objects cannot be created without spies.
spyObj.notSpy = function() {};
expect(function() {
matcher.compare(spyObj);
}).toThrowError(
Error,
/Expected a spy object with spies, but object has no spies/
);
});
});