Что такое TypeError: mime.поиск не является функцией в супертесте?

#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 реализации надежно могут поддерживать любой тип формы взаимозаменяемо, это, вероятно, подходит для всех целей тестирования.