使用 Chai 测试 Node Js 应用程序时模拟文件上传
Simulate file upload while testing Node Js application using Chai
我正在测试接收文件作为输入的 API。我尝试使用 attach()
函数,效果非常好。为了涵盖我的所有用例,我将不得不使用大约 20 个不同的输入文件。我没有保留所有这 20 个文件,而是考虑将所有此类可能的输入存储在一个 JSON
文件中。
示例:
{
"input-1":[
"Name, Email, Phone, Address",
"Sam, sam@xyz.com,0123498765,HomeAddress"
],
"input-2":[
"Name, Email, Phone, Address",
"Yam, Yam@xyz.com,0123498766,HomeAddress"
],
"input-3":[
"Name, Email, Phone, Address",
"Ram, Ram@xyz.com,0123498767,HomeAddress"
]
}
此处每个条目 (input-1
、input-2
、input-3
) 代表每个文件的内容。这只是一个示例。对于每个这样的测试输入,实际文件将有多行。
所以,我需要提取每个 input
并在调用 API 时将其转换为文件。如何使用 Chai
?
实现此目的
您可以迭代数据并动态创建测试和文件,并附加它们,还包括供服务器解析的所有文件相关信息:
const files = {
"input-1": [
"Name, Email, Phone, Address",
"Sam, sam@xyz.com,0123498765,HomeAddress"
],
"input-2": [
"Name, Email, Phone, Address",
"Yam, Yam@xyz.com,0123498766,HomeAddress"
],
"input-3": [
"Name, Email, Phone, Address",
"Ram, Ram@xyz.com,0123498767,HomeAddress"
]
}
describe('uploading', () => {
for (const [file, data] of Object.entries(files)) {
it(`file ${file} should pass`, (done) => {
chai.request(app)
.post('/endpoint')
// create file dynamically
.attach('file', Buffer.from(data, 'utf-8'), {
// add file info accordingly
filename: `${file}.txt`,
contentType: 'text/plain',
knownLength: data.length
})
.end((err, res) => {
if (err) {
throw err;
}
expect(res).to.have.status(200);
done();
})
});
}
});
我正在测试接收文件作为输入的 API。我尝试使用 attach()
函数,效果非常好。为了涵盖我的所有用例,我将不得不使用大约 20 个不同的输入文件。我没有保留所有这 20 个文件,而是考虑将所有此类可能的输入存储在一个 JSON
文件中。
示例:
{
"input-1":[
"Name, Email, Phone, Address",
"Sam, sam@xyz.com,0123498765,HomeAddress"
],
"input-2":[
"Name, Email, Phone, Address",
"Yam, Yam@xyz.com,0123498766,HomeAddress"
],
"input-3":[
"Name, Email, Phone, Address",
"Ram, Ram@xyz.com,0123498767,HomeAddress"
]
}
此处每个条目 (input-1
、input-2
、input-3
) 代表每个文件的内容。这只是一个示例。对于每个这样的测试输入,实际文件将有多行。
所以,我需要提取每个 input
并在调用 API 时将其转换为文件。如何使用 Chai
?
您可以迭代数据并动态创建测试和文件,并附加它们,还包括供服务器解析的所有文件相关信息:
const files = {
"input-1": [
"Name, Email, Phone, Address",
"Sam, sam@xyz.com,0123498765,HomeAddress"
],
"input-2": [
"Name, Email, Phone, Address",
"Yam, Yam@xyz.com,0123498766,HomeAddress"
],
"input-3": [
"Name, Email, Phone, Address",
"Ram, Ram@xyz.com,0123498767,HomeAddress"
]
}
describe('uploading', () => {
for (const [file, data] of Object.entries(files)) {
it(`file ${file} should pass`, (done) => {
chai.request(app)
.post('/endpoint')
// create file dynamically
.attach('file', Buffer.from(data, 'utf-8'), {
// add file info accordingly
filename: `${file}.txt`,
contentType: 'text/plain',
knownLength: data.length
})
.end((err, res) => {
if (err) {
throw err;
}
expect(res).to.have.status(200);
done();
})
});
}
});