dwi2的碎念

不能只是曬網

Play Framework FunctionalTest的POST有些問題!

| Comments

這問題花了我一整天的時間!

我寫了一個上傳檔案的controller, 接下來我想寫一個functional test去測它. Play的api裡面提供了1個POST function讓我(以為)可以很快的測試file upload

1
public static Response POST(Request request, Object url, Map<String, String> parameters, Map<String, File> files);

結果測了半天, 發現無論如何File接到的值都是null, 不管我怎樣改content-type都沒有用! 後來我在stackoverflow上發現這篇Functional tests and posting files in Play Framework?, 原來早就有人遇到同樣的問題, 但目前還沒有人回答!

之後再Google一下關鍵字發現這篇, 裡面有位好心人貼出來測試file upload的code, 結果我發現這段code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Request request = // fill url and stuff 
Part[] parts = // parameters FilePart, StringPart.. 
MultipartRequestEntity requestEntity = new MultipartRequestEntity
(parts, new HttpMethodParams());
ByteArrayOutputStream baos = new ByteArrayOutputStream();
try {
    requestEntity.writeRequest(baos);
} catch (IOException e) {
    throw new RuntimeException(e);
}

request.body = new ByteArrayInputStream(baos.toByteArray());
String contentType = requestEntity.getContentType();
Http.Header header = new Http.Header();
header.name = "content-type";
header.values = Arrays.asList(new String[] { contentType });

就是上述的POST()的source code (Play Framework 1.2.4版本, 在${PLAY_DIRECTORY)/framework/src/play/test/FunctionalTest.java的170行左右開始)

看起來應該是官方在這串討論串出現之後加進FunctionalTest的class裡面作為helper function, 不過現在顯然已經失效.

似乎是要去官方開個issue ticket了… (但別人都到2.0了還會理我的問題嘛? XDDD)

Comments