I am using Grails 2.4 and you can just use the GrailsMockMultipartFile and request.addFile method in unit test.
This code runs on Grails 2.4.4 with the Spock testing environment:
Controller side:
class FileUploadController { def upload() { def multipartFile = request.getFile('requestParamName') if (multipartFile.empty) { flash.message = 'Error: file cannot be empty' render(view: 'upload') return }
Unit test side:
import grails.test.mixin.TestFor import org.codehaus.groovy.grails.plugins.testing.GrailsMockMultipartFile import spock.lang.Specification @TestFor(FileUploadController) class FileUploadControllerSpec extends Specification { void "upload should add flash error message if empty file in request"() { given: def multipartFile = new GrailsMockMultipartFile('requestParamName', 'someExcelFile.xls', 'application/vnd.ms-excel', new byte[0]) request.addFile(multipartFile) when: controller.upload() then: assertEquals('Error: file cannot be empty', flash.message) } }
source share