karatelabs/karate · warning
removeMember() not implemented for
Error message
removeMember() not implemented for: {} - {} What it means
The SimpleObject default removeMember() only logs this warning and does nothing. Deleting a member (delete obj.foo in JS) on an object that doesn't implement removeMember is silently ignored, so the property remains.
Solutions
- Copy the object into a plain Map and mutate that instead
- If you own the type, override removeMember(String) to perform the removal
- Verify the object type in the warning supports mutation at all
Example fix
// before delete response.headers['X-Foo']; // no-op with warning // after var headers = karate.copy(response.headers); delete headers['X-Foo'];
Defensive patterns
Strategy: type-guard
Type guard
// only delete on plain JS/Map objects
function safeDelete(obj, key) { var map = karate.copy(obj); delete map[key]; return map; }
Prevention
- Copy objects into plain Maps before mutating
- Don't rely on delete for Java-backed objects
- Override removeMember in your own SimpleObject classes
When it happens
Trigger: JS delete of a property, or Java-side call to removeMember(name), on a class implementing SimpleObject that relies on the default implementation.
Common situations: Trying to mutate immutable/read-only Java-backed objects from JS; expecting built-in objects (like HTTP responses) to support property deletion.
Understand the failure class
Background: UnsupportedOperationException and "is not supported" errors: when a library deliberately refuses a call — this error's family across 30 libraries.
Related errors
- putMember() not implemented for
- cannot delete property on
- cannot get . (on )
- cannot set . (on )
- doc() called, but no destination set
AI-assisted analysis of karatelabs/karate@a22eb90246 (2026-09-12).
Data as JSON: /api/errors/2e2f4e9deb1969cb.
Report an issue: GitHub.
Appendix: source
Thrown at karate-js/src/main/java/io/karatelabs/js/SimpleObject.java:48
import java.util.Collection;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.Map;
public interface SimpleObject extends ObjectLike {
Logger logger = LoggerFactory.getLogger(SimpleObject.class);
String TO_STRING = "toString";
@Override
default void putMember(String name, Object value) {
logger.warn("putMember() not implemented for: {} - {}", name, getClass().getName());
}
@Override
default void removeMember(String name) {
logger.warn("removeMember() not implemented for: {} - {}", name, getClass().getName());
}
@Override
default Map<String, Object> toMap() {
return toMap(jsKeys(), this);
}
default Collection<String> jsKeys() {
logger.warn("jsKeys() not implemented for: {}", getClass().getName());
return Collections.emptyList();
}
@Override
default Object getMember(String name) {
if (TO_STRING.equals(name)) {
return jsToString();
}
return jsGet(name);View on GitHub (pinned to a22eb90246)