2012-04-12 3 views
0

У меня есть тестовый Спок случай, в котором setup блок выглядит следующим образом:Spock test cases не делает отношения между доменами в Grails?

setup: "set the required objects" 
     def company = new Company(shortName:"infyyy",fullName:"infoysys", 
      region:"tamilnadu" ,email:"[email protected]" ,telphone:34343433,fax:34343433).save(failOnError:true) 
     def project = new Project(name:"testing") 
     def userInstance = new User(username:username,password:password, 
      company:company,project:project,pt:["dummy"]).save(failOnError:true) 
     def tasksInstance = new Tasks(title:"testingwork",startDate:(new Date()-4),endDate:(new Date().clearTime()-6),description:"blah blah",project:project,completed:true,user:userInstance).save(failOnError:true) 

И более того, класс домена Tasks выглядит следующим образом:

class Tasks { 
    static belongsTo = [ user : User, project: Project ] 
     //other code 
} 

И User класс, как это :

class User { 
     static hasMany = [ holidays : Holiday, tasks : Tasks, pt:String, project: Project ] 
     //other code 
} 

Но когда я запускаю свой тест, и мой тест выходит из строя (не с сообщением об ошибке, b ut он не работает в блоке then моего теста Spock), и я обнаружил ошибку в нем. Моя настройка не создает никаких отношений между User и Tasks, что делает мой тест неудачным.

код контроллера, который я пытаюсь проверить это:

def todaysTasks() { 
     def user = User.get(springSecurityService.principal.id) 
     def choice = params.managersProject 
     params.max = Math.min(params.max ? params.int('max') : 10,100) 
     def search = Tasks.createCriteria().list(max: params.max as Integer, offset: params.offset as Integer, order: params.order as String, sort : params.sort) { 
      and { 
        project { 
         like('name',"${choice}") 
        } 
        eq('endDate', new Date().clearTime()) 
      } 
     } 
     println "todays task selected project is " + search 
     [tasksInstanceList : search, tasksInstanceTotal: search.getTotalCount() ] 
    } 

println в приведенных выше тестовых отпечатков 0. Почему это происходит, хотя я делаю endDate в своем тесте меньше сегодняшней даты? Спасибо заранее.

+0

Вам необходимо предоставить более подробную информацию. Пожалуйста, опубликуйте тест, который выходит из строя, и сообщение об ошибке с помощью stacktrace. –

ответ

1

Насколько я знаю, GORM не связывает автоматическое заполнение отношений, следуя отношениям, связанным с этим.

Я всегда делаю следующее.

def u=new User(...) 
u.addToTasks(
    title:"testingwork", 
    startDate:(new Date()-4), 
    endDate:... 
) 
u.save() 

Обратите внимание, что я не создал объект задачи. Я передал карту значений непосредственно в addToX ... это подчеркивает, что добавленный объект принадлежит пользователю и должен быть создан и сохранен GORM.

+0

даже это не работает! –

+0

Ну, вам нужно будет опубликовать больше кода, чтобы люди могли начать задавать проблему в контексте, потому что это должно работать – loteq

+0

Я обновил свой вопрос .. –

0

Вы не можете (и не должны) проверять критерии запросов в своих модульных тестах. Критерий queies не поддерживается в гралированных (и spock) модульных тестах. Прочитайте this вопрос о возможных решениях.

+0

, но его не единичный тест. Его интеграционные тесты. –