When I use grails 2, I use the functional plugin to create the function test and I use Rest-client-builder to send post and get request. The function test itself can start up the server.
However, When I upgrade to grails 3. the built in geb framework can help me create the function test. However, I don't know how i can send the post and get request. And the function test itself can not start up the server. I have to run-app first and then run the test. Does anyone know what should I do function post/get test via grails 3?
Thanks very much
And the function test itself can not start up the server.
You haven't described the details of what you are doing so I don't know why it might not be working for you, but it certainly can be made to work. You probably want to create integration tests and mark them with #Integration. We have a lot of examples in the project at https://github.com/grails/grails3-functional-tests. Look in https://github.com/grails/grails3-functional-tests/tree/master/app1/src/integration-test/groovy/functionaltests. A simple example that should be easy to read is at https://github.com/grails/grails3-functional-tests/blob/master/app1/src/integration-test/groovy/functionaltests/HomeSpec.groovy.
I hope that helps.
Related
I am running Fitnesse on several dispathers and then copy Fitnesse history and logs from all dispatchers to a separate machine. Some other project members need access to test results on this machine but I don't want them to be able to click Test or Suite there. Is it somehow possible to disable Test and Suite buttons?
I would be glad for any options: either somehow configure it in Fitnesse, or get a patched fitnesse.jar, or any other options.
On the main Fitnesse site (http://fitnesse.org/StayInformed), there is the following note: "Note, the Test and Suite buttons on this site have been disabled because search engines tend to invoke them and put my server under stress. This site is actually created with FitNesse.". So I need something like that, if possible.
Is it possible? Not sure I can find a corresponding place in source code to patch and re-build it. My hope is whether someone already did it or find it easy to help. I raised an issue in GitHub where Fitnesse source code is located but I didn't get any feedback yet.
Thank you!
It is indeed possible, that is indeed what is done for fitnesse.org.
I'm not 100% sure how its done but I suspect it is done by disabling 'responders', see http://fitnesse.org/FitNesse.UserGuide.AdministeringFitNesse.ConfigurationFile.
In that page a description is given to disable creating new pages:
Responders=addChild:fitnesse.responders.DisabledResponder,new:org.fitnesse.responders.DisabledResponder
You can probably also use this to disable SuiteResponder and TestResponder, by using:
Responders=suite:fitnesse.responders.DisabledResponder,test:org.fitnesse.responders.DisabledResponder
The full list of responders is in fitnesse.responders.ResponderFactory
On a side note: why do need a full FitNesse installation to show test results? I recommend you look into generating tests results in html format, and just publish that html somewhere. I usually use the jUnit runner to run the tests on a build server (it also creates html output) and then publish the html files generated as build artefact which people can open/view.
Sample, from FitNesse project, generating html in build/fitnesse-results:
import org.junit.runner.RunWith;
#RunWith(FitNesseRunner.class)
#FitNesseRunner.Suite("FitNesse.SuiteAcceptanceTests.SuiteSlimTests.TestScriptTable")
#FitNesseRunner.FitnesseDir(".")
#FitNesseRunner.OutputDir("./build/fitnesse-results")
public class FitNesseRunnerTest {
}
I'm trying to use DRT for running acceptance tests.
Because it's an acceptance test I need to change the location to open the page under test. But of course, after I've done it my test script is gone.
I tried to use iFrames as a workaround, but Dart doesn't provide any means of getting the content of an iFrame. Which means that it's possible to load the page under test into an iframe, but it's impossible to get its html.
I've checked all the DRT tests in the Dart repo:
http://code.google.com/p/dart/source/browse/#svn%2Fbranches%2Fbleeding_edge%2Fdart%2Ftests%2Fhtml
but it seems that none of them changes the location.
Is it possible to use DRT for running acceptance tests? Is there a workaround I didn't think of?
We haven't come up with a good trick (redirection or iframes) to load the app as it is written and runs the test code on top of it. Instead, you could copy the entrypoint of an app and include the test code there, then run the modified app directly in DRT.
Here is an example from the web-ui codebase of a test that does this. This test runs the TodoMVC app and interacts with it:
https://github.com/dart-lang/web-ui/blob/master/test/data/input/todomvc_listorder_test.html
All we did is copy the original app's html, add the 'testing.js' script tag, and replace the dart script tag with the test code. It might be possible to create a script that automates what we do manually today, but we haven't done that.
I have installed the grails web plugin. I can now browse to :
localhost:8080/myappname/console
And I can see the console displayed over there. I have bunch of test-cases written for application. I wish I can test my app from this web console.
Is it possible to do so? I'm very new to grails.
Thanks in advance.
Short answer no. The grails console is meant to write groovy code that interacts with your running application. Your running application does not include your test cases or the grails command line by default.
Long answer sort of. Provided you have all of your projects source code available somewhere in the file system where your application is running, you could call an external process to run test-app and return the result to the user. Here are some docs on running external processes in groovy: http://groovy.codehaus.org/Executing+External+Processes+From+Groovy. I suppose you could also package you application somehow to make this work, but I think doing that would be fairly complex.
I am not sure this is a good use case for the console plugin over all. Hope this helps
What is the best way to load seed (initial or test) data into grails application. I'm considering 3 options
Putting everything in *BootStrap.groovy files. This is tedious if the domain classes and test data are many.
Write custom functionality to load it through xml. May not be too difficult with the excellent xml support by groovy, but lot of switch statements for different domain classes.
Use Liquibase LoadData api. I see you can load the data fairly easy from csv files.
Choice 3 seems the easiest. But, I'm not familiar with Liquibase. Is it good in this scenario, or only used for migration, db changes etc. If anyone could provide a better sol, or point to an example with Liquibase, it would be great help..
Another answer would be to leverage grails run-script. This would allow you to move what you might put in bootstrap and keep it where you want on your file system (possibly outside of the codebase). Similarly, you could install the console plugin and load code through that on a running application.
Depending on your data needs, check out the great build-test-data plugin as well.
I'm using the Fixtures plugin to load test/initial data, it works for me.
http://www.grails.org/plugin/fixtures
look at http://www.dbunit.org/ and http://www.grails.org/DBUnit+Plugin
look into SeedMe plugin:
https://github.com/bertramdev/seed-me
seed = {
author(meta:[key:'name'], name: 'David', description: 'Author Bio Here')
}
One way I have generated seed data is using a service. I created a class, lets call it SeederService. I can inject this service in the Bootstrap.groovy and call whatever method I would want.
The beauty of SeederService is that you can also use the same service in your unit-tests. Simply inject the service class in your unit test and generate your seed data.
For some reason, i can not invoke java method deployed under Tomcat/Weborb application. When i run weborb console and invoke the method from there, there is no problem. However when i tried to call from Silverlight 3 client, it does not response at all. There is one possibility which is incorrect service gateway. But i have checked the server path to make sure it is correct. I also tried different approaches to invoke server call such as proxy and class interface mentioned inside weborb documentation. I'm stuck with this problem for two days already and can not progress any further. Is there any common mistake when it comes to this problem? Any help would appreciate.
Cheers,
Khoa Nguyen
I found the solution. This is because the gateway mapping is incorrect. For instance, When deploy under weborb, the client use localhost:8080/weborb.wo. However when you deploy underworb, the gateway mapping is now change to something like localhost:8080/weborb/console/weborb.wo something like that. You can see how your request mapped to by run the weborb console and look at the server status as you invoke your java methods.
Hope this help.
Cheers,
Khoa Nguyen
There is a new WebORB for Java 4.1 release available that fixes this mapping issue. In addition, the new code generator creates a complete client class library with complex types, enums, bindable model and proxy class for the remote Java service. The release is available here:http://www.themidnightcoders.com/products.html