사용자 로그인을 위해 일반적인 컨트롤러 흐름을 테스트하려고합니다. 대부분의 로그인 시스템과 마찬가지로 확장 관계가 있으며 Grails 문서는 완전히 쓸모가 없습니다. 실제로 사용되는 전형적인 예가 실제 예와 관련이 없으며 완전한 예입니다.Grails 통합 테스트가 MissingMethodException으로 실패했습니다.
@TestFor(UserController)
class UserControllerTests extends GroovyTestCase {
void testLogin() {
params.login = [email: "[email protected]", password: "123"]
controller.login()
assert "/user/main" == response.redirectUrl
}
}
컨트롤러가 수행합니다 :
groovy.lang.MissingMethodException : : 방법의 어떤 서명 : 실패하지
def login() {
if (!params.login) {
return
}
println("Email " + params.login.email)
Person p = Person.findByEmail(params?.login?.email)
...
}
immigration.Person
내 시험은 다음과 같습니다 .methodMissing()은 인수 유형에 적용 할 수 있습니다.() 값 : []
올바른 데이터가 println에 표시되지만 메서드를 호출 할 수 없습니다.
테스트 스위트는 호출 된 데이터베이스 트리거가 있기 때문에 전체적으로 모의 객체를 사용할 수 없으므로 테스트를 거쳐야합니다.
기괴한 것은 내가 직접 테스트에서 메서드를 호출하면 작동하지만 컨트롤러에서 호출하는 것이 아니라는 것입니다. 업데이트를
: 나는 Grails의 명령에서 직접 테스트를 재생, 그리고 그것은 @Test 주석 추가 : 나는 성배 테스트 응용 프로그램 -integration의 UserController 그것을 실행하는 경우@TestFor(UserController)
class UserControllerTests extends GroovyTestCase {
@Test
void testLogin() {
params.login = [email: "[email protected]", password: "123"]
Person.findByEmail(params.login.email)
controller.login()
}
}
이 작동을
결과가 올바르게 채워지지 않았지만 응답이 비어 있고 값이 있어야하고 redirectedUrl이 null이고 내용 본문이 비어있어보기가 포함되어 있어도 flash.message가 null입니다.
@TestFor 주석을 제거하면 조금이라도 작동하지 않습니다. '매개 변수'가 존재하지 않는다고 말하는 것은 실패합니다.
다른 테스트에서는 두 가지 방법이 있습니다. 첫 번째 메소드가 실행되고 Person.findAllByEmail()을 찾으면 두 번째 메소드가 실행되고 Person.findAllByEmail을 찾을 수 없으며 비슷한 오류 - 메소드가 없어져 충돌이 발생합니다.
다른 이상한 업데이트 - 응답 객체가 리디렉션을 다시 보내는 것처럼 보이지만 응용 프로그램 baseUrl에는 사용자 컨트롤러가 아닌 것 같습니다.
슬프게도 이것은 실제로 만들어진 것보다 나쁘다 - 테스트는 조금이라도 실행되지 않습니다.내가 메인 설명을 업데이 트했습니다 : ( – PlexQ