斯波克保存测试

斯波克保存测试

问题描述:

余米想测试这种方法斯波克保存测试

def save() { 

     def activityArtifactInstance = new ActivityArtifact(params) 
     def activityInstance = Activity.get(params.activity.id) 

     def uploadedFile = request.getFile('myFile') 
     if (!uploadedFile.empty) { 
      def userDir = new File(ConfigurationHolder.config.getProperty("userfiles").toString(), "/files") 
      userDir.mkdirs() 
      uploadedFile.transferTo(new File(userDir, uploadedFile.originalFilename)) 
      activityArtifactInstance.fileName = uploadedFile.originalFilename 
     } 

     if (!activityArtifactInstance.save(flush: true)) { 
      render(view: "create", model: [activityArtifactInstance: activityArtifactInstance, activityInstance: activityInstance]) 
      return 
     } 

     flash.message = message(code: 'default.created.message', args: [message(code: 'activityArtifact.label', default: 'ActivityArtifact'), activityArtifactInstance.id]) 
     redirect(controller: "activity", action: "show", id: activityInstance.id, params: [phaseId:activityInstance.phase.id]) 
    } 

这是我的测试代码: -

def 'save action: valid activity artifact'() { 

     setup: 
     mockDomain(ActivityArtifact) 
     mockI18N(ActivityArtifactController) 
     controller.params.name = "Activity Artiface" 

     when: 
     controller.save() 

     then: 
     redirectArgs.action == "show" 
     controller.flash.message != null 


    } 

和IM收到此错误: -

的java.lang。 NullPointerException:无法在空对象上获取属性'id'

如何可以我呼叫活动对象的ID

+0

有更多的东西在这里继续是有用的:你的控制器中的哪一行是抛出异常?你使用的是哪个版本的Grails?什么版本的Spock? – 2012-09-06 14:20:42

您的控制器操作假定将会有一个activity.id参数,您的测试没有设置。