function createPropertyMatcher(propertyTest, messagePrefix) {
			return function (property, value) {
				assertType(property, "string", "property");
				var onlyProperty = arguments.length === 1;
				var message = `${messagePrefix}("${property}"`;
				if (!onlyProperty) {
					message += `, ${valueToString(value)}`;
				}
				message += ")";
				return createMatcher(function (actual) {
					if (
						actual === undefined ||
						actual === null ||
						!propertyTest(actual, property)
					) {
						return false;
					}
					return onlyProperty || deepEqual(actual[property], value);
				}, message);
			};
		}
Creates a property matcher

@private
@param {Function} propertyTest A function to test the property against a value
@param {string} messagePrefix A prefix to use for messages generated by the matcher
@returns {object} A matcher