Grails 2.2.2 Geb 0.9.0 Spock 0.7 exception - grails

I create a project with grails 2.2.2, add
test "org.seleniumhq.selenium:selenium-firefox-driver:2.28.0"
test "org.seleniumhq.selenium:selenium-support:2.31.0"
test "org.gebish:geb-spock:0.9.0"
test "org.gebish:geb-junit4:0.9.0"
test "org.spockframework:spock-grails-support:0.7-groovy-2.0"
in dependencies in BuildConfig.groovy and
test ":geb:0.9.0"
test(":spock:0.7") {
exclude "spock-grails-support"
}
in plugins in BuildConfig.groovy.
Then I create the functional folder in test folder (add it to classpath), create GebConfig.groovy inside with
import org.openqa.selenium.firefox.FirefoxDriver
driver = {
def driver = new FirefoxDriver()
driver
}
baseUrl = "http://localhost:8080/TestGebSpock/"
I don't create any test whatsoever, just run the test :
test-app :functional
I got this stacktrace and no information about it on the net :
Loading Grails 2.2.2
| Environment set to test.....
| Packaging Grails application.....
| Tests FAILED - view reports in /Users/Fiftoine/workspace/TestGebSpock/target/test-reports
| Error java.lang.NullPointerException
| Error at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
| Error at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
Full stacktrace here : http://pastebin.com/CKtzNJtN
Did anyone have had this error before and solved it?
Any help would be appreciated as this is quite simple to reproduce...
Thanks in advance

Related

Grails run test-app with Forked Grails VM exited with error

The error occur when I run grails test-app on my grails 2.4.2 however run-app is fine.
i am working with grails 2.4.2
The error log is something like this:
Failure: initializationError(org.junit.runner.manipulation.Filter)
| java.lang.Exception: No tests found matching grails test target pattern filter from org.junit.runner.Request$1#19535154
at org.junit.internal.requests.FilterRequest.getRunner(FilterRequest.java:35)
at org.junit.runner.JUnitCore.run(JUnitCore.java:138)
| Completed 1 unit test, 1 failed in 0m 0s
| Tests FAILED - view reports in /home/pinhaoo/grailsworkspace/testing/target/test-reports
| Error Forked Grails VM exited with error
Any help is appreciated
I had a similar problem. I found the solution here: Grails User archive. All I had to do was to add the 'given:' keyword to any unit test. Not necessary to all of them, just for one. After that, the command 'test-app' worked fine for me. Apparently, this happens because none of your test classes have any test methods implemented. This is how my test class looks:
import grails.test.mixin.TestFor
import spock.lang.Specification
import ticketsystem.Theater
#TestFor(Theater)
class TheaterSpec extends Specification {
void "test something"() {
given: "test"
}
}

Jenkins grails error java.lang.ClassNotFoundException: geb.transform.AttributeAccessingMetaClassRegisteringTransformation

I trying to run geb and spock tests on Jenkins with grails 2.3.4 but I get error
Error |
Error executing script TestApp: startup failed:
Could not instantiate global transform class
geb.transform.AttributeAccessingMetaClassRegisteringTransformation specified at
jar:file:/var/lib/jenkins/.m2/repository/org/gebish/geb-ast/0.12.0/geb-ast-0.12.0.jar!/
META-INF/services/org.codehaus.groovy.transform.ASTTransformation
because of exception java.lang.ClassNotFoundException:
geb.transform.AttributeAccessingMetaClassRegisteringTransformation
Could not instantiate global transform class
geb.transform.implicitassertions.ImplicitAssertionsTransformation specified at
jar:file:/var/lib/jenkins/.m2/repository/org/gebish/geb-implicit-assertions/0.12.0/
geb-implicit-assertions-0.12.0.jar!/META-INF/services/org.codehaus.groovy.transform.
ASTTransformation because of exception java.lang.ClassNotFoundException:
geb.transform.implicitassertions.ImplicitAssertionsTransformation
How I figure out my Jenkins was using java 6 and grails 2.3.4. When I update java version from 6 to 7 and grails from 2.3.4 to 2.4.5 version all was worked correctly.

Grails-Camel Plugin won't install or run

Please note: Although this question involves a lib called Apache Camel I really think this is just a question about how modern Grails plugins work.
I am on Grails 2.4.2 here, and I am trying to use Apache Camel with Grails and found the Grails Routing plugin annd cannot even get it to install.
The directions say to install by issuing a grails install-plugin routing. When I do this I get:
grails install-plugin routing
Starting process on LT-IE-ZH/10.10.99.14
Loading Grails 2.4.2
|Configuring classpath
.
|Environment set to development
......Warning
|
Since Grails 2.3, it is no longer possible to install plugins using the install-plugin command.
Plugins must be declared in the grails-app/conf/BuildConfig.groovy file.
Example:
grails.project.dependency.resolution = {
...
plugins {
compile ":routing:1.3.2"
}
}
So I modify my BuildConfig.groovy like so:
plugins {
// plugins for the build system only
build ":tomcat:7.0.54"
compile ":routing:1.3.2"
...lots of other stuff omitted for brevity
}
Then the plugin says to create routes, issue a grails create-route <RouteName>. So I do exactly that:
grails create-route OrderListener
Starting process on LT-IE-ZH/10.10.99.14
Loading Grails 2.4.2
|Configuring classpath
|Running pre-compiled script
|Script 'CreateRoute' not found, did you mean:
1) CreateFilters
2) CreatePom
3) CreateApp_
4) CreateController
5) CreateHibernateCfgXml
Please make a selection or enter Q to quit:
What is going on here?!? How do I install/use this plugin?!? Am I losing my mind, or does this plugin simply not work?
Update
I run grails clean-all, then grails refresh-dependencies then grails create-route OrderListener and I get:
Loading Grails 2.4.2
.
|Environment set to development
.....Error
|
groovy.lang.MissingMethodException: No signature of method: CreateRoute.createArtifact() is applicable for argument types: () values: []
Error |
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
Error |
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
Error |
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
Error |
at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
Error |
<huge stacktrace omitted>
Error |
at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite$PogoCachedMethodSiteNoUnwrapNoCoerce.invoke(PogoMetaMethodSite.java:207)
Error |
at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite.call(PogoMetaMethodSite.java:68)
Error |
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:112)
Error |
at gant.Gant$_dispatch_closure5.doCall(Gant.groovy:381)
Error |
... 68 more
Whenever you make a change in BuildConfig.groovy be sure to run grails compile to trigger dependency resolution, which will download new and updated plugins and jars, and it will also compile your code which helps to ensure that things are minimally compatible at least.
But the core issue here is that the plugin's CreateRoute.groovy script is badly broken. It's missing an important include and doesn't come close to calling createArtifact correctly. As a workaround until the authors get this fixed, create a script in your app's scripts folder called CreateCamelRoute.groovy with this content:
includeTargets << grailsScript('_GrailsCreateArtifacts')
target(createCamelRoute: "Creates a new Camel Route.") {
createArtifact(type: 'Route', path: 'grails-app/routes', name: argsMap.params?.get(0) ?: 'Example', suffix: 'Route')
}
setDefaultTarget(createCamelRoute)
It's intentionally named differently from the original because if Grails finds two with the same name it asks which one to use. This way you can just run
grails create-camel-route com.foo.bar.OrderListener
and it will work. Note that I changed the example a bit to include a package - always use packages :)

Tests succeed if run from eclipse (STS) but error if run from grails with ClassNotFoundException

I'm getting different test results when run from eclipse (STS) and from grails.
Under grails my tests error (ie dont even run) with a ClassNotFoundException
In eclipse they run successfully.
(And run-app still works fine when run from grails FWIW.)
Tests had been working in both environments for several days.
Then I deleted a number of files I didn't need (domains. controllers and the unit tests on them)
Now I have a problem.
Versions:
ubuntu 10.04
eclipse
eclipse / SpringToolSuite 3.4.0
- groovy compiler: groovy 2.07
- grails location: /home/nick/grails-2.3.6
- JDK compliance level 1.6
- JAVA_HOME=/usr/lib/jvm/java-6-openjdk
grails 2.3.6
- GRAILS_HOME=/home/nick/grails-2.3.6
- JAVA_HOME=/usr/lib/jvm/java-6-openjdk
eclipse / SpringToolSuite 3.4.0
Everything is still fine and dandy from inside eclipse / STS
select project
run as > junit test
runs 24 tests in 3 test classes
all succeed
grails 2.3.6
But from inside grails in a terminal the tests no longer run.
grails> test-app
| Compiling 2 source files.
| Error Fatal error running tests: Could not load class in test type 'unit' (Use --stacktrace to see the full trace)
| Compiling 2 source files..
| Tests FAILED - view reports in /home/nick/grails-2.3.6-workspace/imca2/target/test-reports
Browsing the test-reports shows: No tests executed.
Adding --stacktrace makes no difference, no stacktrace is provided and it still advises me to add --stacktrace.
grails test-app --stacktrace | tee /tmp/out
gives
| Loading Grails 2.3.6
| Configuring classpath
| Configuring classpath.
| Environment set to test
| Environment set to test.
| Environment set to test..
| Environment set to test...
| Environment set to test....
| Environment set to test.....
| Running without daemon...
| Compiling 1 source files
| Compiling 1 source files.
| Error Fatal error running tests: Could not load class in test type 'unit' (NOTE: Stack trace has been filtered. Use --verbose to see entire trace.)
java.lang.RuntimeException: Could not load class in test type 'unit'
at org.springsource.loaded.ri.ReflectiveInterceptor.jlrMethodInvoke(ReflectiveInterceptor.java:1254)
at org.springsource.loaded.ri.ReflectiveInterceptor.jlrMethodInvoke(ReflectiveInterceptor.java:1254)
at org.springsource.loaded.ri.ReflectiveInterceptor.jlrMethodInvoke(ReflectiveInterceptor.java:1254)
at org.springsource.loaded.ri.ReflectiveInterceptor.jlrMethodInvoke(ReflectiveInterceptor.java:1254)
at org.springsource.loaded.ri.ReflectiveInterceptor.jlrMethodInvoke(ReflectiveInterceptor.java:1254)
Caused by: java.lang.ClassNotFoundException: com.ubergen.AdvocacyStaffSpec
... 5 more
| Error Fatal error running tests: Could not load class in test type 'unit'
| Compiling 1 source files..
| Tests FAILED - view reports in /home/nick/grails-2.3.6-workspace/imca2/target/test-reports
| Error Error running forked test-app: Could not load class in test type 'unit' (NOTE: Stack trace has been filtered. Use --verbose to see entire trace.)
java.lang.RuntimeException: Could not load class in test type 'unit'
at org.springsource.loaded.ri.ReflectiveInterceptor.jlrMethodInvoke(ReflectiveInterceptor.java:1254)
at org.springsource.loaded.ri.ReflectiveInterceptor.jlrMethodInvoke(ReflectiveInterceptor.java:1254)
at org.springsource.loaded.ri.ReflectiveInterceptor.jlrMethodInvoke(ReflectiveInterceptor.java:1254)
at org.springsource.loaded.ri.ReflectiveInterceptor.jlrMethodInvoke(ReflectiveInterceptor.java:1254)
at org.springsource.loaded.ri.ReflectiveInterceptor.jlrMethodInvoke(ReflectiveInterceptor.java:1254)
Caused by: java.lang.ClassNotFoundException: com.ubergen.AdvocacyStaffSpec
... 5 more
| Error Error running forked test-app: Could not load class in test type 'unit'
| Error Forked Grails VM exited with error
I've tried grails clean and clean-all first. test-app then recompiles everything, but it makes no difference - eclipse still runs the tests successfully and grails still errors without running any of them; and it doesn't matter which order I run them in.
Nor does it make any difference which order I run tests in.
What should I do?
In case it helps anyone, I'm posting my own answer after tracking problem down.
As the stacktrace showed only one of the spock tests. Grails could run the others successfully.
On closer inspection the failing test turned out to have a mistyped class name. I hadn't looked closely enough as its name is only a convention, or so I thought.
So, assuming there is a class CorrectName that needs testing but the test is mistyped as WrongNameSpec instead of CorrectNameSpec...
Here is the mistyped test code in CorrectName.groovy:
[snip]
#TestFor(CorrectName)
class WrongNameSpec extends Specification {
[snip]
This runs in eclipse/STS and tests the CorrectName class successfully.
In grails it fails with a stacktrace that says:
| Error Fatal error running tests: Could not load class in test type 'unit'
Caused by: java.lang.ClassNotFoundException: com.ubergen.CorrectNameSpec
Grails and eclipse have different target areas to put the compiled code in. Here the class files are:
./target-eclipse/classes/com/ubergen/WrongNameSpec.class
./target/test-classes/unit/com/ubergen/WrongNameSpec.class
As the stack trace said, there is no CorrectNameSpec class.
This is the corrected code and runs ok in both:
[snip]
#TestFor(CorrectName)
class CorrectName extends Specification {
[snip]
Grails is doing something like building a list of tests from the #TestFor but assuming the test classname will follow the expected convention.
Summary:
In eclipse/sts the name of the unit test is a convention, its the #TestFor that matters. In grails the name of the unit test is not just a convention, you must name it as expected, because grails will assume there is a class file that matches that name and you will get a ClassNotFoundException.

Error at application bootstrap after upgrade to grails 2.3.1

After upgrading my grails app from grails 2.2.4 to grails 2.3.1 the test-app build fails at the application bootstrap with the following error message:
Fatal error running tests: Method on class [de.javandry.minigolf.webapp.Role] was used outside of a Grails application. If running in the context of a test using the mocking API or bootstrap Grails correctly.
Running the build with --stacktrace --verbose I see the following details (stacktraces reduced to the IMHO relevant lines):
2013-10-25 22:56:27,876 [main] WARN util.DTDEntityResolver - recognized obsolete hibernate namespace http://hibernate.sourceforge.net/. Use namespace http://www.hibernate.org/dtd/ instead. Refer to Hibernate 3.6 Migration Guide!
2013-10-25 22:56:28,674 [main] WARN hibernate.AbstractEhcacheRegionFactory - Couldn't find a specific ehcache configuration for cache named [de.javandry.minigolf.webapp.Role]; using defaults.
2013-10-25 22:56:32,264 [main] WARN servlet.DefaultGrailsApplicationAttributes - ApplicationContext not found in org.codehaus.groovy.grails.APPLICATION_CONTEXT attribute of servlet context.
| Error 2013-10-25 22:56:34,473 [main] ERROR plugins.DefaultGrailsPluginManager - Error configuring dynamic methods for plugin [hibernate:3.6.10.M3]: org.grails.datastore.gorm.GormStaticApi.setTransactionManager(Lorg/springframework/transaction/PlatformTransactionManager;)V
java.lang.NoSuchMethodError: org.grails.datastore.gorm.GormStaticApi.setTransactionManager(Lorg/springframework/transaction/PlatformTransactionManager;)V
at org.codehaus.groovy.grails.orm.hibernate.HibernateGormStaticApi.<init>(HibernateGormStaticApi.groovy:67)
at org.codehaus.groovy.grails.orm.hibernate.HibernateGormEnhancer.getStaticApi(HibernateGormEnhancer.groovy:87)
...
at grails.plugin.hibernate3.HibernatePluginSupport$__clinit__closure3.doCall(HibernatePluginSupport.groovy:444)
...
| Error Fatal error running tests: Method on class [de.javandry.minigolf.webapp.Role] was used outside of a Grails application. If running in the context of a test using the mocking API or bootstrap Grails correctly.
java.lang.IllegalStateException: Method on class [de.javandry.minigolf.webapp.Role] was used outside of a Grails application. If running in the context of a test using the mocking API or bootstrap Grails correctly.
...
at de.javandry.minigolf.webapp.Role.currentGormInstanceApi(Role.groovy)
at de.javandry.minigolf.webapp.Role$currentGormInstanceApi$0.call(Unknown Source)
...
at de.javandry.minigolf.webapp.Role.save(Role.groovy)
at de.javandry.minigolf.webapp.Role$save.call(Unknown Source)
...
at BootStrap$_closure1.doCall(BootStrap.groovy:7)
My BootStrap.groovy looks as follows:
class BootStrap {
def init = { servletContext ->
def adminRole = new Role(authority: 'ROLE_ADMIN').save(flush: true, failOnError: true)
def userRole = new Role(authority: 'ROLE_USER').save(flush: true, failOnError: true)
...
The error occurs at line 3 when the first entity is created.
[edit] I've already adjusted the plugins and dependencies. Here's the part of my BuildConfig.groovy:
def seleniumVersion = "2.21.0"
def gebVersion = "0.9.0"
dependencies {
test("org.seleniumhq.selenium:selenium-htmlunit-driver:$seleniumVersion") {
exclude "xml-apis"
}
test "org.seleniumhq.selenium:selenium-chrome-driver:$seleniumVersion"
test "org.seleniumhq.selenium:selenium-firefox-driver:$seleniumVersion"
test "org.seleniumhq.selenium:selenium-support:$seleniumVersion"
test "org.gebish:geb-spock:$gebVersion"
}
plugins {
runtime ":hibernate:3.6.10.M3"
runtime ":jquery:1.10.2"
runtime ":resources:1.2.1"
runtime ":database-migration:1.3.6"
build ":tomcat:7.0.40.1"
compile ":cache:1.1.1"
compile ":spring-security-core:1.2.7.3"
compile ":webxml:1.4.1"
test ":geb:$gebVersion"
test ":build-test-data:2.0.6"
}
What else can I try to fix this error?
Grails 2.3.1 requires Hibernate 3.6.10.2 plugin version. This is mentioned in the release notes: http://grails.org/2.3.1%20Release%20Notes
See also
http://jira.grails.org/browse/GRAILS-10686
Update your hibernate plugin
for grails 2.3.1
plugins {
runtime ":hibernate:3.6.10.2"
[...]
}
for grails 2.3.2
plugins {
compile ":hibernate:3.6.10.3"
[...]
}

Resources