web-dev-qa-db-ja.com

応答が一致するかどうかをテストするために、データを使用してモカで要求後テストを作成する方法は?

質問:応答が一致するかどうかをテストする投稿リクエストテストをmochaで作成するにはどうすればよいですか?

応答はサードパーティサービスへのリダイレクトであるため、単にURL文字列になります。

作業例のペイロード:

curl -H "Content-Type: application/json" -X POST -d '{"participant":{"nuid":"98ASDF988SDF89SDF89989SDF9898"}}' http://localhost:9000/api/members

member.controller.js // postメソッド

// Creates a new member in the DB.
exports.create = function(req, res) {
  Member.findByIdAndUpdate(req.body.participant.nuid,
    { "$setOnInsert": { "_id": req.body.participant.nuid } },
      { "upsert": true },
      function(err,doc) {
        if (err) throw err;
        res.send({
          'redirectUrl': req.protocol + '://' + req.get('Host') + '/registration/' + req.body.participant.nuid
        })
    }
  );
};

res.sendが必要

 {"redirectUrl":"http://localhost:9000/registration/98ASDF988SDF89SDF89989SDF9898"}  

GETリクエストテストの例

var should = require('should');
var app = require('../../app');
var request = require('supertest');

describe('GET /api/members', function() {

  it('should respond with JSON array', function(done) {
    request(app)
      .get('/api/members')
      .expect(200)
      .expect('Content-Type', /json/)
      .end(function(err, res) {
        if (err) return done(err);
        res.body.should.be.instanceof(Array);
        done();
      });
  });
  it('should respond with redirect on post', function(done) {
    // need help here
  });
});
18
Matthew Harwood

これで試してください:

  it('should respond with redirect on post', function(done) {
        request(app)
          .post('/api/members')
          .send({"participant":{"nuid":"98ASDF988SDF89SDF89989SDF9898"}})
          .expect(200)
          .expect('Content-Type', /json/)
          .end(function(err, res) {
            if (err) done(err);
            res.body.should.have.property('participant');
            res.body.participant.should.have.property('nuid', '98ASDF988SDF89SDF89989SDF9898');

             });
          done();
      });
14
javierfdezg

以下に示すように、タイプを「フォーム」に、コンテンツタイプをjsonに設定することもできます。

it("returns a token when user and password are valid", (done) => {
    Users.createUserNotAdmin().then((user: any) => {
        supertestAPI
        .post("/login")
        .set("Connection", "keep alive")
        .set("Content-Type", "application/json")
        .type("form")
        .send({"email": user.email, password: "123456"})
        .end((error: any, resp: any) => {
            chai.expect(JSON.parse(resp.text)["token"].length).above(400, "The token length should be bigger than 400 characters.");
            done();
        })
    });
});

以下に示すように、サーバーを作成するときにbody-parserも設定する必要があります。

 server.use(bodyParser.urlencoded({ extended: false }));
 server.use(bodyParser.json());
1
Leonardo Venoso