#node.js #express #mocha.js #supertest
#node.js #экспресс #mocha.js #супертест
Вопрос:
Я только что обновился до узла 14.15.4, и теперь любой post-запрос supertest с отправкой завершается ошибкой «TypeError: mime.поиск не является функцией «.
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 реализации надежно могут поддерживать любой тип формы взаимозаменяемо, это, вероятно, подходит для всех целей тестирования.