gpt4 book ai didi

grails - 通过Grails测试通过Controller中的Domain类访问db中的数据

转载 作者:行者123 更新时间:2023-12-02 15:49:32 25 4
gpt4 key购买 nike

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上返回了一些值,但是当我在grails中对其进行测试时,它返回了Null。
我的测试代码如下:
@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
}
}

response.text返回为空。
在本地主机中,它返回一个哈希值。

最佳答案

也许:

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应用程序。

我可能会在当前测试中添加一个给定的:部分,并在那里初始化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 =='整数' preference.value.toBigInteger():(value_type =='boolean'?(preference.value =='true'|| preference.value =='1'?true:false):( value_type =='array'? .value.split(','):(value_type =='hash'?hash_conv(preference.value):(value_type =='json'?new JsonSlurper()。parseText(preference.value):preference.value.toString ()))))

关于grails - 通过Grails测试通过Controller中的Domain类访问db中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41713888/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com