在我在这里查看的 Grails 项目中,过滤器将域对象放在请求中......
class TokenFilters {
def filters = {
all( uri: '/hiphop/**' ) {
before = {
MyToken myToken = ...
request.myToken = myToken
MyToken 看起来像:
class MyToken {
String id
String token
static mapping = {
token( index: true )
id( generator: 'uuid' )
}
...
}
在我的控制器中,从请求中提取了 myToken。
MyController {
myaction {
MyToken accessToken = request.myToken
一切都好。我希望为控制器编写一个集成测试。
@Test
void testLogin() {
def mc = new MyController()
def myToken = new MyToken(1234);
// set the request parameters
mc.request.parameters = [myToken:myToken];
def message = mc.action();
assertTrue(message.indexOf("trans") > 0)
}
当我运行它时,我得到:
Failure: testLogin(MyTests)
| java.lang.IllegalArgumentException: Parameter map value must be single value or array of type [java.lang.String]
at testLogin(MyTests.groovy:40)
所以看起来 Grails 只会让我一个字符串或单个值,并且不喜欢我在过滤器中的请求上放置一个对象。即使你它让我在过滤器中放置相同的对象类型。
我真的很想在不进行功能测试的情况下对此进行测试。请帮忙。我正在使用 Grails 2.2.1
谢谢