Что такое TypeError: mime.lookup не является функцией в Supertest?
Я только что обновился до узла 14.15.4, и теперь любой супертестовый почтовый запрос с отправкой завершается с ошибкой «TypeError: mime.lookup не является функцией».
it("Should be able to select an address", () => {
return request(app).post(`/admin/machines/${newmachine._id}/assignments/add`)
.send({userid: testuser._id.toString()})
.expect(302)
.then( (res) => {
expect(res.headers.location).to.include(`/admin/machines/${newmachine._id}`);
});
});
Я получаю ошибку:
Should be able to select an address:
TypeError: mime.lookup is not a function
at Test.Request.type (node_modules/supertest/node_modules/superagent/lib/node/index.js:265:38)
at Test.RequestBase.send (node_modules/supertest/node_modules/superagent/lib/request-base.js:575:21)
at Context.<anonymous> (test/routes/admin/machines.js:275:10)
at processImmediate (internal/timers.js:461:21)
Если, однако, я использую "поле" вместо отправки, ошибка исчезнет:
return request(app).post(`/admin/machines/${newmachine._id}/assignments/add`)
.field('userid',testuser._id.toString())
.expect(302)
.then( (res) => {
expect(res.headers.location).to.include(`/admin/machines/${newmachine._id}`);
});
});
Что мне не хватает?
1 ответ
Я нашел ответ или, по крайней мере, исправление. Если я добавлю:
.set('Content-Type','application/x-www-form-urlencoded')
ошибка исчезнет. Итак, чтобы обновить исходный код выше:
it("Should be able to select an address", () => {
return request(app).post(`/admin/machines/${newmachine._id}/assignments/add`)
.set('Content-Type','application/x-www-form-urlencoded')
.send({userid: testuser._id.toString()})
.expect(302)
.then( (res) => {
expect(res.headers.location).to.include(`/admin/machines/${newmachine._id}`);
});
});
Хотя с педантичной точки зрения, это не обязательно точный тест, поскольку тип формы изменен на «x-www-form-urlencoded», но, учитывая, что реализации node.js надежно поддерживают любой тип формы взаимозаменяемо, это, вероятно, подходит для всех целей тестирования.