我正在尝试为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消息。我一直试图在测试中搜索如何模拟视图参数,但到目前为止还没有去。
答案 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] =“无论传递给输入的值是什么”