0
def index() { 
    //println params 
    String params_key =params['key'] 
    def c = get_value(params_key) 
    def resp = ['key': params_key, 'value':c] 
    render resp as JSON 
} 
private static hash_conv(String value) 
{ 
    def matches = Eval.me(value.replace(':','').replace('{','[').replace('=>',':').replace('#','//').replace('}',']')) 
    return matches 
} 

private get_value(String key, default_value=null){ 
    def app_preferences = get_preferences() 
    def result = app_preferences[key] 
    if (result == null) { 
    result = default_value 
    } 

    return result 
} 

private get_preferences(Boolean mobile_app = false){ 
    def all_app_preference = AppPreferences.all 
    def mapped_value = [:] 
    def all_app = all_app_preference.each{obj -> mapped_value << get_preference(obj)} 
    return mapped_value 
} 

private static get_preference(AppPreferences preference){ 
    def value_type = preference.value_type.toLowerCase() 
    def val = value_type == 'integer' ? preference.value.toBigInteger() : (value_type == 'boolean' ? (preference.value == 'true' || preference.value == '1' ? true : false):(value_type == 'array' ? preference.value.split(',') : (value_type == 'hash' ? hash_conv(preference.value) :(value_type == 'json' ? new JsonSlurper().parseText(preference.value) : preference.value.toString())))) 
    def map_value = [:] 
    map_value[preference.preference_key] = val 
    return map_value 
} 

여기서는 AppPreferences 도메인을 사용하고 있습니다. 그것은 localhost.But에 어떤 가치를 반환합니다 내가 grails에서 그것을 테스트 할 때 Null을 반환합니다. 내 테스트 코드는 다음과 같이 다음 response.text가 null로 반환grails 테스트를 통해 컨트롤러의 도메인 클래스를 통해 db의 데이터에 액세스

@TestFor(AppPreferencesController) 
@Mock([AppPreferences]) 
//controller.session.SPRING_SECURITY_CONTEXT = [authentication:[principal:[id: 'blah']]] 
class AppPreferencesControllerSpec extends Specification { 

    def setup() { 
    } 

    def cleanup() { 
    } 

    /*void "test something"() { 
     expect:"fix me" 
      true == false 
    }*/ 
    void test_for_index() 
    { 
     when: 
      controller.session.SPRING_SECURITY_CONTEXT = [authentication:[principal:[id: 'blah']]] 
      params.key = 'role_to_feature_map' 
      controller.index() 
     then: 
      1 == 1 
      2 == 2 
      println response.text 
    } 
} 

. 로컬 호스트에서 해시 값을 반환합니다. 아마도

+0

테스트 설정 중에 AppPreferences가 어딘가에 채워지나요? 그렇지 않으면 어떤 데이터도 없을 것이고 null이 리턴됩니다. –

+0

해당 항목이 채워지지 않습니다. 하지만 나는 grails에 처음 온거야. 어떻게해야하지? 나는 근검에서 가치를 취함으로써 그것을 행한다. –

+0

설정()과 같이 할 수 있습니다. 새로운 AppPreferences (field1 : 'blah') .save (failOnError : true, flush : true) –

답변

0

는 :

void test_for_index() { 
    when: 
     controller.session.SPRING_SECURITY_CONTEXT = [authentication:[principal:[id: 'blah']]] 
     controller.params.key = 'role_to_feature_map' <-- the params attached to the controller 
     controller.index() 
    then: 
     1 == 1 
     2 == 2 
     println response.text 
} 

테스트는 일반적으로 개발 또는 생산 이외의 다른 데이터베이스에 대해 실행합니다. 테스트 (단위 테스트라고 가정)는 AppPreferences 도메인 클래스를 조롱해야합니다. 단위 테스트는 바로 테스트 단위 인 코드 단위입니다. 테스트 된 코드를 감싸는 Grails 애플리케이션은 없습니다.

나는 아마도 given : 섹션을 현재 테스트에 추가하고 AppPreferences 도메인 클래스의 엔티티를 초기화 할 것입니다.

given: 
    def appPref1 = new AppPreferences("whatever you must set to pass constraints").save(flush:true) 
    controller.session.SPRING_SECURITY_CONTEXT = [authentication:[principal:[id: 'blah']]] 
    controller.params.key = 'role_to_feature_map' 

when: 
    controller.index() 

then: 
    1 == 1 
    2 == 2 
    println response.text 

개인 의견 : 아래 코드 행은 읽을 수 없습니다. 내가 일하는 곳에서는 결코 코드 리뷰를 통과하지 못할 것이다. switch 문을 사용해보십시오.

def val = value_type == 'integer'? 'value_type =='array '? preference (value_type =='boolean '?) (선호도 값 =='선호도 '=='1 '? (value_type == 'json'? new JsonSlurper(). parseText (preference.value) : preference.value.toString .value.split (',') : (value_type == '해쉬'?()))))))))

관련 문제