2016-10-07 3 views
0

저는 Grails newb를 꽤 원시적입니다. 그러나 저는 Groovy와 Java 배경을 가지고 있습니다. 이것은 내가 컨텍스트 자바 6에서Grails 테스트가 실패했습니다.

자바 8로 업데이트하고있어 고대 테스트 응용 프로그램입니다 : Grails는 2.3.9/자바 1.8.0_101 실패 테스트는 다음과 같습니다

@TestFor(PillsController) 
@Mock(Pills) 
class PillsControllerTests { 
... 
void testUpdate() { 
    controller.update() 

    assert flash.message != null 
    assert response.redirectedUrl == '/somethingPills/list' 

    response.reset() 

    populateValidParams(params) 
    def somethingPills = new SomethingPills(params) 

    assert somethingPills.save() != null 

    params.id = somethingPills.id 

    controller.update() 

    assert view == "/somethingPills/edit" //<--- FAILS HERE. VIEW IS NULL. 
    assert model.somethingPillsInstance != null 

    somethingPills.clearErrors() 

    populateValidParams(params) 
    controller.update() 

    assert response.redirectedUrl == "/somethingPills/show/$somethingPills.id" 
    assert flash.message != null 

    response.reset() 
    somethingPills.clearErrors() 

    populateValidParams(params) 
    params.id = somethingPills.id 
    params.version = -1 
    controller.update() 

    assert view == "/somethingPills/edit" 
    assert model.somethingPillsInstance != null 
    assert model.somethingPillsInstance.errors.getFieldError('version') 
    assert flash.message != null 
} 
} 

내가 생각 " 보기 "는 모델/뷰/컨트롤러의 코드화 된 변형에 대한 참조입니다.

맨 위로 업데이트가 혼란 스럽습니다. 아무 것도 저장되지 않은 경우 업데이트하십시오. 나는 위의 이동 및 SomethingPills 선언 업데이트를 시도했다. 결과는 뷰가 여전히 null이라는 것입니다. 어떤 시각이 될지 예측할 수 있습니까?

내가 알아 차 렸던 또 다른 것. 업데이트 방법을 클릭하면 두 개의 매개 변수가 있음을 알 수 있습니다. Groovy가 기본적으로 매개 변수를 전달하지 못하거나 그 오류를 보게된다고 가정합니다. 나는 이것이 작동해야하는 방법인지는 모르겠지만 SomethingPills에서 ID & 버전을 가져 와서 통과하면 null 대신 "somethingPills/edit"가 아닌/somethingPills/show/1을 얻을 수 있습니다.

[편집] 내가이 발견했습니다. http://docs.grails.org/2.3.9/guide/scaffolding.html

답변

0

이동 업데이트() 메소드 당신의 PillsController.groovy 파일을 찾아

당신이

render view:'/somethingPills/edit', .... 
같은 문이 있는지 확인

단위 테스트에서 뷰는 다음을 참조합니다. 제어기가 렌더링하는 gsp 파일의 경로.

단위 테스트가 여전히 실패 할 경우 게시해야하는 update() 메소드에 약간의 로직이있을 것이라고 확신합니다. 단위 테스트를 작성하면 일부 조건이 일치하는 것처럼 보이고 gsp 템플리트를 렌더링합니다. 그렇지 않으면 리디렉션됩니다.

+0

Duuuhh ... ;-) 음, 좋아. 나는 그 문제를 안다. 어떤 이유로이 언어에서는 어떤 것이 예상되는 곳에서는 매개 변수를 전달하지 않아도됩니다. 이 경우 둘 중 하나가 null 인 경우 null이 반환됩니다. 그것은 익숙해지는 데 많은 시간이 걸릴 것입니다. – user447607

+0

그루비 진실 (http://groovy-lang.org/semantics.html#Groovy-Truth)을 살펴볼 수 있습니다. 나는 당신의 미래 딜레마에 대답 할 수 있기를 바랍니다. – elixir

관련 문제