Я написал плагин, содержащий пользовательскую библиотеку тегов, которая сама использует пользовательские экземпляры артефактов. taglib работает точно так, как ожидалось, когда плагин включен в приложение. Однако я не могу написать для него интеграционный тест.
Допустим, пользовательский тип артефакта — «Foo», а класс обработчика артефакта — FooArtefactHandler
.
(Упрощенный) класс FooTagLib
выглядит так:
class FooTagLib {
static namespace = "bar"
def eachFoo = { attrs, body ->
grailsApplication.fooClasses.each { foo ->
out << body()
}
}
}
Связанный класс FooTagLibTests
выглядит следующим образом:
import grails.test.mixin.*
@TestFor(FooTagLib)
class FooTagLibTests {
void testEachFoo() {
grailsApplication.registerArtefactHandler(new FooArtefactHandler())
// Classes AFoo and BFoo are in the test/integration folder
grailsApplication.addArtefact(FooArtefactHandler.TYPE, AFoo)
grailsApplication.addArtefact(FooArtefactHandler.TYPE, BFoo)
// just to check if artefacts are correctly loaded
assert grailsApplication.fooClasses.length == 2
assert applyTemplate("<bar:eachFoo>baz</bar:eachFoo>") == "bazbaz"
}
}
Когда я запускаю этот тест, результат следующий:
| Failure: testeachFoo(com.my.package.FooTagLibTests)
| org.codehaus.groovy.grails.web.taglib.exceptions.GrailsTagException: Error executing tag <bar:eachFoo>: No such property: fooClasses for class: org.codehaus.groovy.grails.commons.DefaultGrailsApplication
ThegrailsApplication
в taglib, похоже, не тот же экземпляр, что и в тесте. Может кто-то объяснить это мне? Я делаю что-то не так здесь?