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/ ); }); });