Mocha Chai-确认正文中具有'name'属性

问题描述 投票:0回答:1

我觉得我误会了什么是摩卡/柴来决定什么是“财产”。我首先运行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}`)
    })
javascript node.js express mocha chai
1个回答
1
投票

简短回答:

使用

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

© www.soinside.com 2019 - 2024. All rights reserved.