在grails中进行多个multipartfile上载测试

时间:2014-04-03 05:18:16

标签: grails gsp spock

我正在尝试为grails中的文件上传编写测试。我正在使用spock作为我的测试框架。

我有一个javascript函数链接到我的视图上的按钮,只要点击它就会在我的表单中添加<input type="file">

它看起来像这样:

<script>
        var fileNum = 1;
        function addUploader() {
            fileNum++;
            var fileInputTag = "<input type=\"file\" name=\"myfile." +fileNum+ "\"/>";
            var uploadField = document.getElementById("uploadFields");
            var row = uploadField.insertRow(fileNum + 1);
            var cell = row.insertCell(0);
            cell.innerHTML = fileInputTag + "<br/>";
        }
    </script>

<tr>
  <td>
    <input type="file" class="required" name="myfile.1" />
  </td>
</tr>
<tr>
  <td> </td>
</tr>
<tr>
  <td>
    <a href="#" onCLick="addUploader()" onSubmit="return false">More Files</a> <br />
    <br/>
    <input type="submit" value="Download"/>
  </td>
</tr>

我的控制器看起来像这样:

def uploadFile(){
    List<MultipartFile> files = []
    params.myfile.each {
        if (it.value.isEmpty()) {
            flash.message = message(code: 'upload.empty.message')
            redirect(uri: "/")
            return
        }
        files.add((MultipartFile) it.value)
    }
    def faxPreviews = []
    faxPreviews = uploadFileService.generateFaxPreviews(files)
render(view:'/uploadfile/index', model:[p:uploadFileService.decodeFaxPreviews(faxPreviews)])
}

如果列表为空但我不知道如何将其放入测试中,我想测试是否显示了flash消息。我一直试图在测试中搜索如何模拟视图参数,但到目前为止还没有去。

1 个答案:

答案 0 :(得分:0)

这实际上很容易。 D'哦!我最终得到了这个测试。

void "updloadFile should warn when no files are attached."() {
    given:
        def file = new GrailsMockMultipartFile('mockFile', ''.bytes)
        Map<MultipartFile> files = [:]
        files[1] = file
        controller.params.myfile = files

    when:
        controller.uploadFile()

    then:
        response.redirectedUrl == '/'
        flash.message != null
}

我的问题是我认为视图中的myfile实际上是地图的名称时是一个关键。所以myfile.1会变成myfile [1] =“无论传递给输入的值是什么”