AA.
AA.

Reputation: 4606

Testing if a closure was 'injected" to instance

I inject method afterInsert to metaClass instance when it hasProperty("auditable")

def injectMethod(object) {
    if(object.hasProperty("auditable") {
        object.metaClass.afterInsert = { doSomething }
    }
}

How can I test that object responds to afterInsert?

I tried:

assert object.respondsTo("afterInsert")

and

assert object.hasProperty("afterInsert")

nothing

assert object.metaClass.afterInsert != null // Always true

Upvotes: 0

Views: 111

Answers (2)

dmahapatro
dmahapatro

Reputation: 50285

Consider asserting as below w.r.t the example:

assert object.metaClass.respondsTo(object, "afterInsert")
assert !object.metaClass.respondsTo(object, "beforeInsert")

assuming object is a Grails Domain class. In case object is a base POGO, signature of hasProperty can be similar to that of respondsTo.

Upvotes: 2

Will
Will

Reputation: 14559

metaClass.respondsTo?

class A {
  def foo
}

a = new A()

assert a.hasProperty("foo")
assert !a.metaClass.respondsTo(a, "bar")

a.metaClass.bar = { 10 }

assert a.hasProperty("foo")
assert a.metaClass.respondsTo(a, "bar")

assert a.bar() == 10

Upvotes: 2

Related Questions