fix(Assertion): Improve toHaveProperty alias by forwarding arguments correctly for intuitive object property assertions
This commit is contained in:
parent
62cf7f5db5
commit
ff795f6fe0
@ -1,5 +1,12 @@
|
||||
# Changelog
|
||||
|
||||
## 2025-04-30 - 2.4.1 - fix(Assertion)
|
||||
Improve toHaveProperty alias by forwarding arguments correctly for intuitive object property assertions
|
||||
|
||||
- Updated the toHaveProperty method in the Assertion class to check the number of arguments and call the appropriate object matcher
|
||||
- Added several scratch alias files to demonstrate and test the alias usage
|
||||
- Enhanced test cases in test/propertypath to cover alias behavior
|
||||
|
||||
## 2025-04-30 - 2.4.0 - feat(object)
|
||||
add toHaveOwnProperty method and improve property-path matching in object assertions
|
||||
|
||||
|
14
scratch-alias.js
Normal file
14
scratch-alias.js
Normal file
@ -0,0 +1,14 @@
|
||||
import * as smartexpect from './dist_ts/index.js';
|
||||
const obj = { topLevel: 'hello' };
|
||||
try {
|
||||
smartexpect.expect(obj).toHaveProperty('topLevel');
|
||||
console.log('alias toHaveProperty succeeded');
|
||||
} catch(err) {
|
||||
console.error('alias toHaveProperty failed:', err.message);
|
||||
}
|
||||
try {
|
||||
smartexpect.expect(obj).not.toHaveProperty('missing');
|
||||
console.log('alias not.toHaveProperty succeeded');
|
||||
} catch(err) {
|
||||
console.error('alias not.toHaveProperty failed:', err.message);
|
||||
}
|
20
scratch-alias2.js
Normal file
20
scratch-alias2.js
Normal file
@ -0,0 +1,20 @@
|
||||
import * as smartexpect from './dist_ts/index.js';
|
||||
console.log('script start');
|
||||
const obj = { topLevel: 'hello' };
|
||||
console.log('script: after obj');
|
||||
console.log('script: test for alias toHaveProperty');
|
||||
try {
|
||||
smartexpect.expect(obj).toHaveProperty('topLevel');
|
||||
console.log('alias toHaveProperty succeeded');
|
||||
} catch(err) {
|
||||
console.error('alias toHaveProperty failed:', err.message);
|
||||
}
|
||||
console.log('script: after first try');
|
||||
console.log('script: test for alias not.toHaveProperty');
|
||||
try {
|
||||
smartexpect.expect(obj).not.toHaveProperty('missing');
|
||||
console.log('alias not.toHaveProperty succeeded');
|
||||
} catch(err) {
|
||||
console.error('alias not.toHaveProperty failed:', err.message);
|
||||
}
|
||||
console.log('script end');
|
8
scratch-alias3.js
Normal file
8
scratch-alias3.js
Normal file
@ -0,0 +1,8 @@
|
||||
import * as smartexpect from './dist_ts/index.js';
|
||||
console.log('script start');
|
||||
const obj = { topLevel: 'hello' };
|
||||
console.log('script: test alias toHaveProperty');
|
||||
const ret = smartexpect.expect(obj).toHaveProperty('topLevel');
|
||||
console.log('got ret:', ret, 'typeof', typeof ret);
|
||||
console.log('ret.then?', ret && typeof (ret as any).then);
|
||||
console.log('script end');
|
8
scratch-alias4.js
Normal file
8
scratch-alias4.js
Normal file
@ -0,0 +1,8 @@
|
||||
import * as smartexpect from './dist_ts/index.js';
|
||||
console.log('script start');
|
||||
const obj = { topLevel: 'hello' };
|
||||
console.log('script: test alias toHaveProperty');
|
||||
const ret = smartexpect.expect(obj).toHaveProperty('topLevel');
|
||||
console.log('got ret:', ret, 'typeof', typeof ret);
|
||||
console.log('ret.then?', ret && ret.then);
|
||||
console.log('script end');
|
10
scratch-alias5.js
Normal file
10
scratch-alias5.js
Normal file
@ -0,0 +1,10 @@
|
||||
import * as smartexpect from './dist_ts/index.js';
|
||||
console.log('start');
|
||||
const obj = { topLevel: 'hello' };
|
||||
try {
|
||||
smartexpect.expect(obj).toHaveProperty('topLevel');
|
||||
console.log('success');
|
||||
} catch (e) {
|
||||
console.log('caught in catch:', e, e.message);
|
||||
}
|
||||
console.log('end');
|
@ -5,6 +5,7 @@ tap.test('toHaveProperty nested path via dot notation', async () => {
|
||||
const testObject = { level1: { level2: { level3: 'value' }}, publicTest: 'hi' };
|
||||
|
||||
smartexpect.expect(testObject).object.toHaveProperty('publicTest');
|
||||
smartexpect.expect(testObject).toHaveProperty('publicTest');
|
||||
// Existence check
|
||||
smartexpect.expect(testObject).object.toHaveProperty('level1.level2.level3');
|
||||
// Value check
|
||||
|
@ -3,6 +3,6 @@
|
||||
*/
|
||||
export const commitinfo = {
|
||||
name: '@push.rocks/smartexpect',
|
||||
version: '2.4.0',
|
||||
version: '2.4.1',
|
||||
description: 'A testing library to manage expectations in code, offering both synchronous and asynchronous assertion methods.'
|
||||
}
|
||||
|
@ -355,7 +355,13 @@ export class Assertion<T = unknown, M extends TExecutionType = 'sync'> {
|
||||
public toInclude(substring: string) { return this.string.toInclude(substring); }
|
||||
public toMatch(regex: RegExp) { return this.string.toMatch(regex); }
|
||||
public toBeOneOf(values: any[]) { return this.string.toBeOneOf(values as string[]); }
|
||||
public toHaveProperty(property: string, value?: any) { return this.object.toHaveProperty(property, value); }
|
||||
public toHaveProperty(property: string, value?: any) {
|
||||
// Forward only provided arguments to object matcher to preserve argument count
|
||||
if (arguments.length === 2) {
|
||||
return this.object.toHaveProperty(property, value);
|
||||
}
|
||||
return this.object.toHaveProperty(property);
|
||||
}
|
||||
public toHaveOwnProperty(property: string, value?: any) { return this.object.toHaveOwnProperty(property, value); }
|
||||
public toMatchObject(expected: object) { return this.object.toMatchObject(expected); }
|
||||
public toBeInstanceOf(constructor: any) { return this.object.toBeInstanceOf(constructor); }
|
||||
|
Loading…
x
Reference in New Issue
Block a user