私はいくつかのテストでChai-HTTPを利用しようとしています。当然私は私のGET以上のテストをしたいと思いますが、私はPOSTをしようとするときに大きな障害物に当たっているようです。Chai-HTTPを使って投稿するときに間違ったコンテンツタイプがあると思われる
私のPOSTがうまくいかなかった理由を理解するために、私はPOSTテストサーバーに対してそれらのヒットを開始しました。
frisby.create('LOGIN')
.post('http://posttestserver.com/post.php', {
grant_type:'password',
username:'[email protected]',
password:'password'
})
.addHeader("Token", "text/plain")
.expectStatus(200)
})
.toss();
になり:
Time: Mon, 27 Jun 16 13:40:54 -0700
Source ip: 204.191.154.66
Headers (Some may be inserted by server)
REQUEST_URI = /post.php
QUERY_STRING =
REQUEST_METHOD = POST
GATEWAY_INTERFACE = CGI/1.1
REMOTE_PORT = 19216
REMOTE_ADDR = 204.191.154.66
HTTP_CONNECTION = close
CONTENT_LENGTH = 64
HTTP_HOST = posttestserver.com
HTTP_TOKEN = text/plain
CONTENT_TYPE = application/x-www-form-urlencoded
UNIQUE_ID = V3GPVkBaMGUAAB1Uf04AAAAc
REQUEST_TIME_FLOAT = 1467060054.9575
REQUEST_TIME = 1467060054
Post Params:
key: 'grant_type' value: 'password'
key: 'username' value: '[email protected]'
key: 'password' value: 'password'
Empty post body.
Upload contains PUT data:
grant_type=password&username=hello%40world.com&password=password
そして、ここで
は(だけで正常に動作)テストのための完全に異なるツールチェーン(ジャスミン・ノードとFrisby)を使用してフォーマットされたPOSTの試みでありますChaiとChai-HTTPを使ったPOSTの試みがあります。私はJasmineとFrisbyを使って上記の例と同じように動作すると期待していますが、実際の要求はいくつかの点で異なります。その結果describe('/post.php', function() {
var endPointUnderTest = '/post.php';
it('should return an auth token', function(done) {
chai.request('http://posttestserver.com')
.post(endPointUnderTest)
.set('Token', 'text/plain')
.send({
grant_type: 'password',
username: '[email protected]',
password: 'password'
})
.end(function(err, res) {
console.log(res);
res.should.have.status(200);
done();
});
});
});
:
Time: Tue, 28 Jun 16 06:55:50 -0700
Source ip: 204.191.154.66
Headers (Some may be inserted by server)
REQUEST_URI = /post.php
QUERY_STRING =
REQUEST_METHOD = POST
GATEWAY_INTERFACE = CGI/1.1
REMOTE_PORT = 1409
REMOTE_ADDR = 204.191.154.66
HTTP_CONNECTION = close
CONTENT_LENGTH = 76
CONTENT_TYPE = application/json
HTTP_TOKEN = text/plain
HTTP_USER_AGENT = node-superagent/2.0.0
HTTP_ACCEPT_ENCODING = gzip, deflate
HTTP_HOST = posttestserver.com
UNIQUE_ID = V3KB5kBaMGUAAErPF6IAAAAF
REQUEST_TIME_FLOAT = 1467122150.9125
REQUEST_TIME = 1467122150
No Post Params.
== Begin post body ==
{"grant_type":"password","username":"[email protected]","password":"password"}
== End post body ==
Upload contains PUT data:
{"grant_type":"password","username":"[email protected]","password":"password"}
お知らせCONTENT_TYPE、ポストのparamsの違い、特にデータをPUTが(私はこれが私の問題の原因だと思います)。
Jasmine/Frisbyが 'application/x-www-form-urlencoded'形式でPOSTを送信する場合、Chai-HTTPは 'application/json'形式を使用しているようです。
私は何とかChai-HTTPのPOST機能を悪用していますか?あるいは、Chai-HTTPは 'application/x-www-form-urlencoded' POSTリクエストを許可していませんか?私はこれを解決することができないようで、私のテストではMocha/Chaiツールチェーンを使用するように移行するのが最終的なハードルです(目標ではない限り、別のライブラリを使用しない方がいいですそれは絶対に必要です)。