Add specs for the new toHaveSpyInteractions matcher

This commit is contained in:
Nito Buendia
2022-02-16 21:11:42 +08:00
parent 8e85f3df74
commit 7b01003d0b
2 changed files with 79 additions and 0 deletions

22
spec/core/integration/MatchersSpec.js Normal file → Executable file
View File

@@ -625,6 +625,28 @@ describe('Matchers (Integration)', function() {
});
});
describe('toHaveSpyInteractions', function() {
let spyObj;
beforeEach(function() {
spyObj = env.createSpyObj('NewClass', ['spyA', 'spyB']);
spyObj.otherMethod = function() {};
});
verifyPasses(function(env) {
spyObj.spyA();
env.expect(spyObj).toHaveSpyInteractions();
});
verifyFails(function(env) {
env.expect(spyObj).toHaveSpyInteractions();
});
verifyFails(function(env) {
spyObj.otherMethod();
env.expect(spyObj).toHaveSpyInteractions();
});
});
describe('toMatch', function() {
verifyPasses(function(env) {
env.expect('foo').toMatch(/oo$/);

View File

@@ -0,0 +1,57 @@
describe('toHaveSpyInteractions', () => {
let spyObj;
beforeEach(() => {
spyObj = jasmineUnderTest.createSpyObj('NewClass', ['spyA', 'spyB']);
spyObj.otherMethod = function() {};
});
it('detects spy interactions', () => {
spyObj.spyA();
expect(spyObj).toHaveSpyInteractions();
});
it('detects multiple spy interactions', () => {
spyObj.spyA();
spyObj.spyB();
spyObj.spyA();
expect(spyObj).toHaveSpyInteractions();
});
it('detects no spy interactions', () => {
expect(spyObj).not.toHaveSpyInteractions();
});
it('ignores non-observed spy object interactions', () => {
spyObj.otherMethod();
expect(spyObj).not.toHaveSpyInteractions();
});
[true, 123, 'string'].forEach(testValue => {
it(`throws error if a non-object (${testValue}) is passed`, () => {
expect(() => {
expect(true).toHaveSpyInteractions();
}).toThrowError(Error, /Expected a spy object, but got/);
});
});
[['argument'], [false, 0]].forEach(testValue => {
it(`throws error if arguments (${testValue}) are passed`, () => {
expect(() => {
expect(spyObj).toHaveSpyInteractions(...testValue);
}).toThrowError(Error, /Does not take arguments/);
});
});
it('throws error if spy object has no spies', () => {
const newSpyObj = jasmine.createSpyObj('OtherClass', ['method']);
// Removing spy since spy objects cannot be created without spies.
newSpyObj.method = function() {};
expect(() => {
expect(newSpyObj).toHaveSpyInteractions();
}).toThrowError(
Error,
/Expected a spy object with spies, but object has no spies/
);
});
});