У меня есть контроллер в Grails, который возвращает ответ в формате JSON.
Я написал тест, который работает примерно так
test(){
def expectedResponse=JSON.parse('[{"username":"user","startDate":"2010-11-30"}]')
...
def actualResponse=JSON.parse(response.text)
println "Expecting: ${expectedResponse.toString()}"
println "Actual: ${actualResponse.toString()}"
assertEquals(expectedResponse.toString(), actualResponse.toString())
...
}
Это работает так, как ожидалось
Expecting: [{"username":"user","startDate":"2010-11-30"}]
Actual: [{"username":"user","startDate":"2010-11-30"}]
Однако мне было интересно, есть ли лучший способ сделать это, не прибегая к сравнению строк. Возможно, что-то, что могло бы дать мне возможность добавлять атрибуты к ответу, не делая недействительным мой тестовый пример?
Я мог бы построить это сам, но я ожидал, что в язык будет встроено какое-то сравнение JSON.
Обновление: я пытался сделать это напрямую, без toString, и получил противоречивые результаты, не совсем понимаю, почему, он работал на одном этапе, а затем внезапно получил это. Я не вижу каких-либо изменений кода, которые я сделал, которые вызвали бы разницу
groovy.lang.MissingMethodException: No signature of method: com.siggysale.MainControllerTests.assertEquals() is applicable for argument types: (org.codehaus.groovy.grails.web.json.JSONArray, org.codehaus.groovy.grails.web.json.JSONArray) values: [[], []]