Local tpl = ObjectTemplate::New(isolate);
tpl->SetInternalFieldCount(1);
Local
If you expect v8::External to delete an object of type TestExternal for you, then you should somehow let it know that it is managing an object of TestExternal.
Since this is usually done via class template and v8::External is not declared as a template, my guess is that it probably won't call delete for you and you need to delete the pointer manually.