Мокко Чай - Подтвердите, что в теле есть свойство 'name' - PullRequest
0 голосов
/ 03 февраля 2020

Я чувствую, что неправильно понимаю, что такое мокко / чай, что такое "свойство". Сначала я запускаю node index.js.

index. js

const express = require('express')

module.exports = server

function server (port = 0) {
  return new Promise((resolve, reject) => {
    const app = express()

    app.get('/greet/:name', (req, res) => {
      res.send(`Hello ${req.params.name}`)
    })

    const listener = app.listen(port, err => {
      if (err) return reject(err)
      resolve({
        port: listener.address().port,
        stop: () => listener.close()
      })
    })
  })

}

server(3000)
  .then(({ port, stop }) => {
    console.log('Server listening on port ' + port)
  })
  .catch(err => {
    console.error(err.stack)
    process.exit(1)
  })

Затем я запускаю npm test.

/ test / test-pages. js

var expect  = require('chai').expect;
var request = require('request');

it('Greet Bob', function(done) {
    request('http://localhost:3000/greet/Bob' , function(error, response, body) {
        expect(body).to.have.property('name');
        done();
    });
});

Я обнаружил следующую ошибку:

  1) Greet Bob:
     Uncaught AssertionError: expected 'Hello Bob' to have property 'name'
      at Request._callback (test\test-pages.js:12:30)
      at Request.self.callback (node_modules\request\request.js:185:22)
      at Request.<anonymous> (node_modules\request\request.js:1161:10)
      at IncomingMessage.<anonymous> (node_modules\request\request.js:1083:12)
      at endReadableNT (_stream_readable.js:1185:12)
      at processTicksAndRejections (internal/process/task_queues.js:81:21)



npm ERR! Test failed.  See above for more details.

Ошибка expected 'Hello Bob' to have property 'name', но не Bob свойство 'name' в этом случае? Bob - это свойство :name в приведенной ниже части index.js, нет?

app.get('/greet/:name', (req, res) => {
      res.send(`Hello ${req.params.name}`)
    })

1 Ответ

1 голос
/ 03 февраля 2020

Краткий ответ:

Использование

res.json({ name: `Hello ${req.params.name}` });

вместо

res.send(`Hello ${req.params.name}`)

Завершенный рабочий пример:

index.js:

const express = require("express");

function server(port = 0) {
  return new Promise((resolve, reject) => {
    const app = express();

    app.get("/greet/:name", (req, res) => {
      res.json({ name: `Hello ${req.params.name}` });
    });

    const listener = app.listen(port, (err) => {
      if (err) return reject(err);
      resolve({
        port: listener.address().port,
        stop: () => listener.close(),
      });
    });
  });
}

if (require.main === module) {
  server(3000)
    .then(({ port, stop }) => {
      console.log("Server listening on port " + port);
    })
    .catch((err) => {
      console.error(err.stack);
      process.exit(1);
    });
}

module.exports = server;

index.test.js:

const expect = require("chai").expect;
const request = require("request");
const createServer = require("./");

describe("60032042", () => {
  let server;
  before(async () => {
    server = await createServer(3000);
  });
  after(() => {
    server.stop();
  });
  it("Greet Bob", function(done) {
    request("http://localhost:3000/greet/Bob", function(error, response, body) {
      body = JSON.parse(body);
      expect(body).to.have.property("name");
      done();
    });
  });
});

Результаты интеграционных испытаний с отчетом о покрытии:

 60032042
    ✓ Greet Bob (38ms)


  1 passing (53ms)

---------------|----------|----------|----------|----------|-------------------|
File           |  % Stmts | % Branch |  % Funcs |  % Lines | Uncovered Line #s |
---------------|----------|----------|----------|----------|-------------------|
All files      |    82.76 |       40 |    83.33 |    85.71 |                   |
 index.js      |    68.75 |       40 |    71.43 |    73.33 |       22,24,27,28 |
 index.test.js |      100 |      100 |      100 |      100 |                   |
---------------|----------|----------|----------|----------|-------------------|

Исходный код: https://github.com/mrdulin/mocha-chai-sinon-codelab/tree/master/src/stackoverflow/60032042

...