2016-12-19 60 views
0

我有一個express.js post函數,可以很好地接收和處理文件。Request.js模擬一個文件上傳(multipart/form-data)

我想寫一個jasmine單元測試,它使用模擬相同的東西fs & request

const request = require("request") 
const fs = require("fs") 
const app = require("../app.js") 
const base_url = "http://localhost:3002/" 

var wordFile = fs.readFileSync(__dirname + '/test.docx', 'utf8') 

describe("POST a word file to /word", function() { 
    it("parses the word file, and returns an array of components", function(done) { 
    request({ 
     url: base_url + "word", 
     method: "POST", 
     json: true, 
     headers: { 
     "content-type": "multipart/form-data", 
     }, 
     body: wordFile 
    }, function (error, response, body) { 
     expect(response.statusCode).toBe(200) 
     done() 
     } 
    ) 
    }) 
}) 

我得到一個500錯誤,但是當我用下面的上傳查看我的應用程序,它工作正常:

<form action="/mediaDev/word" method="post" enctype="multipart/form-data"> 
    <input type="file" name='doc' placeholder="Select file"/> 
    <br/> 
    <button>Upload</button> 
</form> 

是這個問題涉及到的事實,我讀的文件utf8還是別的?

回答

1

在您的表格中,您發佈到/mediaDev/word,而在您的測試中,您只發布到/word。檢查這是正確的。

您還沒有跟隨request.js documented examples for sending multipart form data,這對於你的情況應該是這樣的:

var formData = { 
    doc: fs.createReadStream(__dirname + '/test.docx', {encoding:'utf8'}) 
} 

request.post({url: base_url + "word", formData: formData}, function(error, repsonse, body) { 
    expect(response.statusCode).toBe(200) 
    done() 
}); 
+0

感謝但這恰恰與nginx的路由做,終點似乎是正確的。與您發佈的內容相比,我獲得了404而不是500. –

+0

好的 - 然後更改URL並嘗試更改我提出的代碼 - 會發生什麼? – duncanhall

+0

對不起,沒有注意到有其他建議會嘗試。 –

相關問題