Introduction
Documentation
- Installing Ambition
- Creating your first application
- Configuration
- Controllers and Views
- Ambition Templates
- Accessing and Storing Data
- Extending your Application with Plugins
- Integrating with Almanna
- Web Forms and Helpers
- Testing Your Application
Tutorials
Advanced Topics
Etcetera
- Frequently Asked Questions (FAQ)
- Handy Recipes and How Tos
- Troubleshooting
- Support Forum on Google Groups
Documentation
Testing Your Application
Every great application is supported by a suite of unit tests. While unit testing support in Vala is slightly weaker than other languages, Ambition provides some help to successfully test a web application. The unit test infrastructure relies on GLib's built in capabilities.
The test directory
Unit tests are located in the "test
" directory of the generated application. A very simple test is included by default, in ApplicationTest.vala
.
public class ApplicationTest {
public static void add_tests() {
Test.add_func("/application/init", () => {
var application = new Example.Application();
assert( application != null );
});
}
}
The provided test will always pass by default provided the application compiles. To create this test, a non-namespaced class is created with a static method called add_tests()
. add_tests
can set up any global or local variables, and then should present a list of calls to Test.add_func( string test_name, test_func() )
. The test_name
can be any value, but the common naming methodology looks like a path with a hierarchy of functionality. So, when testing a controller, a good name may be /application/controller/root
. The anonymous method has no parameters, but contains the logic of the test case, which has access to any global static variables outside of that function.
To add a new test class, create the new test class, add it to the list of files under vala_precompile
in test/CMakeLists.txt
, and then add the add_tests()
call to InitializeTests.vala
after the existing entry. You may add as many test classes and functions in those classes as you'd like.
Testing outside of the web framework
In the Ambition web application, utility classes, models, and other functionality can be tested using the existing GLib testing capabilities. No additional support is needed to run this as a part of your existing test suite.
Testing requests and responses
Ambition provides the Ambition.Testing.Helper
class to easily test requests and responses in a web application. Helper
provides mock_dispatch
to create a simple request, and mock_dispatch_with_request
to take a manually created Request object and run it through the dispatcher. Those two methods will return a Ambition.Testing.TestResponse
object to run assertions against.
Available assertions are in the TestResponse
class documentation.
Example:
using Ambition;
using Ambition.Testing;
public class ControllerRootTest {
public static void add_tests() {
Test.add_func("/application/controller/root/index", () => {
var result = Helper.mock_dispatch( new Example.Application(), HttpMethod.GET, "/" );
result.assert_status_is(200);
result.assert_content_type_is("text/html");
result.assert_content_like("Example");
});
}
}