[6a3a178] | 1 | var needle = require('..'),
|
---|
| 2 | http = require('http'),
|
---|
| 3 | should = require('should'),
|
---|
| 4 | sinon = require('sinon'),
|
---|
| 5 | stream = require('stream'),
|
---|
| 6 | helpers = require('./helpers');
|
---|
| 7 |
|
---|
| 8 | var multiparts = ['----------------------NODENEEDLEHTTPCLIENT'];
|
---|
| 9 | multiparts.push(['Content-Disposition: form-data; name=\"foo\"'])
|
---|
| 10 | multiparts.push(['\r\nbar\r\n----------------------NODENEEDLEHTTPCLIENT--'])
|
---|
| 11 | // multiparts.push(['Content-Disposition: form-data; name=\"test\"'])
|
---|
| 12 | // multiparts.push(['\r\næµè¯\r\n----------------------NODENEEDLEHTTPCLIENT--'])
|
---|
| 13 | // multiparts.push(['\r\n' + Buffer.from('测试').toString() + '\r\n----------------------NODENEEDLEHTTPCLIENT--'])
|
---|
| 14 |
|
---|
| 15 |
|
---|
| 16 | describe('post data (e.g. request body)', function() {
|
---|
| 17 |
|
---|
| 18 | var stub, spy, server;
|
---|
| 19 |
|
---|
| 20 | before(function(done) {
|
---|
| 21 | server = helpers.server({ port: 4321 }, done);
|
---|
| 22 | })
|
---|
| 23 |
|
---|
| 24 | after(function(done) {
|
---|
| 25 | server.close(done);
|
---|
| 26 | })
|
---|
| 27 |
|
---|
| 28 | afterEach(function() {
|
---|
| 29 | if (stub) stub.restore();
|
---|
| 30 | if (spy) spy.restore();
|
---|
| 31 | })
|
---|
| 32 |
|
---|
| 33 | function get(data, opts, cb) {
|
---|
| 34 | return needle.request('get', 'http://localhost:' + 4321, data, opts, cb)
|
---|
| 35 | }
|
---|
| 36 |
|
---|
| 37 | function post(data, opts, cb) {
|
---|
| 38 | return needle.request('post', 'http://localhost:' + 4321, data, opts, cb)
|
---|
| 39 | }
|
---|
| 40 |
|
---|
| 41 | function spystub_request() {
|
---|
| 42 | var http_req = http.request;
|
---|
| 43 | stub = sinon.stub(http, 'request').callsFake(function(opts, cb) {
|
---|
| 44 | var req = http_req(opts, cb);
|
---|
| 45 | spy = sinon.spy(req, 'write');
|
---|
| 46 | return req;
|
---|
| 47 | })
|
---|
| 48 | }
|
---|
| 49 |
|
---|
| 50 | function check_request(method) {
|
---|
| 51 | stub.calledOnce.should.be.true;
|
---|
| 52 | stub.args[0][0]['headers']['host'].should.equal('localhost:4321');
|
---|
| 53 | stub.args[0][0]['method'].should.equal(method);
|
---|
| 54 | }
|
---|
| 55 |
|
---|
| 56 | describe('with multipart: true', function() {
|
---|
| 57 |
|
---|
| 58 | describe('when null', function() {
|
---|
| 59 |
|
---|
| 60 | it('sends request (non multipart)', function(done) {
|
---|
| 61 | spystub_request();
|
---|
| 62 |
|
---|
| 63 | post(null, { multipart: true }, function(err, resp) {
|
---|
| 64 | check_request('post');
|
---|
| 65 | done();
|
---|
| 66 | })
|
---|
| 67 | })
|
---|
| 68 |
|
---|
| 69 | it('doesnt set Content-Type header', function(done) {
|
---|
| 70 | post(null, { multipart: true }, function(err, resp) {
|
---|
| 71 | should.not.exist(resp.body.headers['content-type']);
|
---|
| 72 | done();
|
---|
| 73 | })
|
---|
| 74 | })
|
---|
| 75 |
|
---|
| 76 | it('doesnt change default Accept header', function(done) {
|
---|
| 77 | post(null, { multipart: true }, function(err, resp) {
|
---|
| 78 | // resp.body contains 'header' and 'body', mirroring what we sent
|
---|
| 79 | resp.body.headers['accept'].should.equal('*/*');
|
---|
| 80 | done();
|
---|
| 81 | })
|
---|
| 82 | })
|
---|
| 83 |
|
---|
| 84 | it('doesnt write anything', function(done) {
|
---|
| 85 | spystub_request();
|
---|
| 86 |
|
---|
| 87 | post(null, { multipart: true }, function(err, resp) {
|
---|
| 88 | spy.called.should.be.false;
|
---|
| 89 | resp.body.body.should.eql('');
|
---|
| 90 | done();
|
---|
| 91 | })
|
---|
| 92 | })
|
---|
| 93 |
|
---|
| 94 | })
|
---|
| 95 |
|
---|
| 96 | describe('when string', function() {
|
---|
| 97 |
|
---|
| 98 | it('explodes', function() {
|
---|
| 99 | (function() {
|
---|
| 100 | post('foobar', { multipart: true })
|
---|
| 101 | }).should.throw()
|
---|
| 102 | })
|
---|
| 103 |
|
---|
| 104 | })
|
---|
| 105 |
|
---|
| 106 | describe('when object', function() {
|
---|
| 107 |
|
---|
| 108 | describe('get request', function() {
|
---|
| 109 |
|
---|
| 110 | it('sends request', function(done) {
|
---|
| 111 | spystub_request();
|
---|
| 112 |
|
---|
| 113 | get({ foo: 'bar', test: '测试' }, { multipart: true }, function(err, resp) {
|
---|
| 114 | check_request('get');
|
---|
| 115 | done();
|
---|
| 116 | })
|
---|
| 117 | })
|
---|
| 118 |
|
---|
| 119 | it('sets Content-Type header', function(done) {
|
---|
| 120 | post({ foo: 'bar', test: '测试' }, { multipart: true }, function(err, resp) {
|
---|
| 121 | resp.body.headers['content-type'].should.equal('multipart/form-data; boundary=--------------------NODENEEDLEHTTPCLIENT');
|
---|
| 122 | done();
|
---|
| 123 | })
|
---|
| 124 | })
|
---|
| 125 |
|
---|
| 126 | it('doesnt change default Accept header', function(done) {
|
---|
| 127 | post({ foo: 'bar', test: '测试' }, { multipart: true }, function(err, resp) {
|
---|
| 128 | resp.body.headers['accept'].should.equal('*/*');
|
---|
| 129 | done();
|
---|
| 130 | })
|
---|
| 131 | })
|
---|
| 132 |
|
---|
| 133 | it('writes string as buffer', function(done) {
|
---|
| 134 | spystub_request();
|
---|
| 135 |
|
---|
| 136 | get({ foo: 'bar' }, { multipart: true }, function(err, resp) {
|
---|
| 137 | spy.called.should.be.true;
|
---|
| 138 |
|
---|
| 139 | spy.args[0][0].should.be.an.instanceof(String);
|
---|
| 140 | spy.args[0][0].toString().should.equal(multiparts.join('\r\n'));
|
---|
| 141 | resp.body.body.should.eql(multiparts.join('\r\n'));
|
---|
| 142 | done();
|
---|
| 143 | })
|
---|
| 144 | })
|
---|
| 145 |
|
---|
| 146 | it('writes japanese chars correctly as binary', function(done) {
|
---|
| 147 | spystub_request();
|
---|
| 148 |
|
---|
| 149 | get({ foo: 'bar', test: '测试' }, { multipart: true }, function(err, resp) {
|
---|
| 150 | spy.called.should.be.true;
|
---|
| 151 |
|
---|
| 152 | spy.args[0][0].should.be.an.instanceof(String);
|
---|
| 153 | Buffer.from(spy.args[0][0]).toString('hex').should.eql('2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d4e4f44454e4545444c4548545450434c49454e540d0a436f6e74656e742d446973706f736974696f6e3a20666f726d2d646174613b206e616d653d22666f6f220d0a0d0a6261720d0a2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d4e4f44454e4545444c4548545450434c49454e540d0a436f6e74656e742d446973706f736974696f6e3a20666f726d2d646174613b206e616d653d2274657374220d0a0d0ac3a6c2b5c28bc3a8c2afc2950d0a2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d4e4f44454e4545444c4548545450434c49454e542d2d')
|
---|
| 154 | done();
|
---|
| 155 | })
|
---|
| 156 | })
|
---|
| 157 |
|
---|
| 158 |
|
---|
| 159 | })
|
---|
| 160 |
|
---|
| 161 | describe('post request', function() {
|
---|
| 162 |
|
---|
| 163 | it('sends request', function(done) {
|
---|
| 164 | spystub_request();
|
---|
| 165 |
|
---|
| 166 | post({ foo: 'bar', test: '测试' }, { multipart: true }, function(err, resp) {
|
---|
| 167 | check_request('post');
|
---|
| 168 | done();
|
---|
| 169 | })
|
---|
| 170 | })
|
---|
| 171 |
|
---|
| 172 | it('writes string as buffer', function(done) {
|
---|
| 173 | spystub_request();
|
---|
| 174 |
|
---|
| 175 | post({ foo: 'bar' }, { multipart: true }, function(err, resp) {
|
---|
| 176 | spy.called.should.be.true;
|
---|
| 177 | spy.args[0][0].should.be.an.instanceof(String);
|
---|
| 178 | spy.args[0][0].toString().should.equal(multiparts.join('\r\n'));
|
---|
| 179 | resp.body.body.should.eql(multiparts.join('\r\n'));
|
---|
| 180 | done();
|
---|
| 181 | })
|
---|
| 182 | })
|
---|
| 183 |
|
---|
| 184 | it('writes japanese chars correctly as binary', function(done) {
|
---|
| 185 | spystub_request();
|
---|
| 186 |
|
---|
| 187 | post({ foo: 'bar', test: '测试' }, { multipart: true }, function(err, resp) {
|
---|
| 188 | spy.called.should.be.true;
|
---|
| 189 | spy.args[0][0].should.be.an.instanceof(String);
|
---|
| 190 | Buffer.from(spy.args[0][0]).toString('hex').should.eql('2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d4e4f44454e4545444c4548545450434c49454e540d0a436f6e74656e742d446973706f736974696f6e3a20666f726d2d646174613b206e616d653d22666f6f220d0a0d0a6261720d0a2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d4e4f44454e4545444c4548545450434c49454e540d0a436f6e74656e742d446973706f736974696f6e3a20666f726d2d646174613b206e616d653d2274657374220d0a0d0ac3a6c2b5c28bc3a8c2afc2950d0a2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d4e4f44454e4545444c4548545450434c49454e542d2d')
|
---|
| 191 | done();
|
---|
| 192 | })
|
---|
| 193 | })
|
---|
| 194 |
|
---|
| 195 | })
|
---|
| 196 |
|
---|
| 197 | })
|
---|
| 198 |
|
---|
| 199 | describe('when stream', function() {
|
---|
| 200 |
|
---|
| 201 | var stream_for_multipart;
|
---|
| 202 |
|
---|
| 203 | before(function() {
|
---|
| 204 | stream_for_multipart = new stream.Readable();
|
---|
| 205 | stream_for_multipart._read = function() {
|
---|
| 206 | this.push('foobar');
|
---|
| 207 | this.push(null);
|
---|
| 208 | }
|
---|
| 209 | })
|
---|
| 210 |
|
---|
| 211 | it('explodes', function() {
|
---|
| 212 | (function() {
|
---|
| 213 | post(stream_for_multipart, { multipart: true })
|
---|
| 214 | }).should.throw()
|
---|
| 215 | })
|
---|
| 216 |
|
---|
| 217 | })
|
---|
| 218 |
|
---|
| 219 | })
|
---|
| 220 |
|
---|
| 221 | describe('non multipart', function() {
|
---|
| 222 |
|
---|
| 223 | describe('when null', function() {
|
---|
| 224 |
|
---|
| 225 | describe('get request', function() {
|
---|
| 226 |
|
---|
| 227 | it('sends request', function(done) {
|
---|
| 228 | spystub_request();
|
---|
| 229 |
|
---|
| 230 | get(null, {}, function(err, resp) {
|
---|
| 231 | check_request('get');
|
---|
| 232 | done();
|
---|
| 233 | })
|
---|
| 234 | })
|
---|
| 235 |
|
---|
| 236 | it('doesnt write anything', function(done) {
|
---|
| 237 | spystub_request();
|
---|
| 238 |
|
---|
| 239 | get(null, {}, function(err, resp) {
|
---|
| 240 | spy.called.should.be.false;
|
---|
| 241 | resp.body.body.should.eql('');
|
---|
| 242 | done();
|
---|
| 243 | })
|
---|
| 244 | })
|
---|
| 245 |
|
---|
| 246 | })
|
---|
| 247 |
|
---|
| 248 | describe('post request', function() {
|
---|
| 249 |
|
---|
| 250 | it('sends request', function(done) {
|
---|
| 251 | spystub_request();
|
---|
| 252 |
|
---|
| 253 | post(null, {}, function(err, resp) {
|
---|
| 254 | check_request('post');
|
---|
| 255 | done();
|
---|
| 256 | })
|
---|
| 257 | })
|
---|
| 258 |
|
---|
| 259 | it('doesnt write anything', function(done) {
|
---|
| 260 | spystub_request();
|
---|
| 261 |
|
---|
| 262 | post(null, {}, function(err, resp) {
|
---|
| 263 | spy.called.should.be.false;
|
---|
| 264 | resp.body.body.should.eql('');
|
---|
| 265 | done();
|
---|
| 266 | })
|
---|
| 267 | })
|
---|
| 268 |
|
---|
| 269 | })
|
---|
| 270 |
|
---|
| 271 | })
|
---|
| 272 |
|
---|
| 273 | describe('when string with no equal sign', function() {
|
---|
| 274 |
|
---|
| 275 | describe('get request', function() {
|
---|
| 276 |
|
---|
| 277 | it('explodes', function() {
|
---|
| 278 | (function() {
|
---|
| 279 | get('foobar', {})
|
---|
| 280 | }).should.throw()
|
---|
| 281 | })
|
---|
| 282 |
|
---|
| 283 | })
|
---|
| 284 |
|
---|
| 285 | describe('post request', function() {
|
---|
| 286 |
|
---|
| 287 | it('sends request', function(done) {
|
---|
| 288 | spystub_request();
|
---|
| 289 |
|
---|
| 290 | post('foobar', {}, function(err, resp) {
|
---|
| 291 | check_request('post');
|
---|
| 292 | done();
|
---|
| 293 | })
|
---|
| 294 | })
|
---|
| 295 |
|
---|
| 296 | it('writes string as buffer', function(done) {
|
---|
| 297 | spystub_request();
|
---|
| 298 |
|
---|
| 299 | post('foobar', {}, function(err, resp) {
|
---|
| 300 | spy.called.should.be.true;
|
---|
| 301 | spy.args[0][0].should.be.an.instanceof(Buffer);
|
---|
| 302 | spy.args[0][0].toString().should.equal('foobar');
|
---|
| 303 | resp.body.body.should.eql('foobar');
|
---|
| 304 | done();
|
---|
| 305 | })
|
---|
| 306 | })
|
---|
| 307 |
|
---|
| 308 | })
|
---|
| 309 |
|
---|
| 310 | })
|
---|
| 311 |
|
---|
| 312 | describe('when string WITH equal sign', function() {
|
---|
| 313 |
|
---|
| 314 | describe('get request', function() {
|
---|
| 315 |
|
---|
| 316 | describe('with json: false (default)', function() {
|
---|
| 317 |
|
---|
| 318 | it('sends request, adding data as querystring', function(done) {
|
---|
| 319 | spystub_request();
|
---|
| 320 |
|
---|
| 321 | get('foo=bar', { json: false }, function(err, resp) {
|
---|
| 322 | check_request('get');
|
---|
| 323 | stub.args[0][0]['path'].should.equal('/?foo=bar')
|
---|
| 324 | done();
|
---|
| 325 | })
|
---|
| 326 | })
|
---|
| 327 |
|
---|
| 328 | it('doesnt set Content-Type header', function(done) {
|
---|
| 329 | get('foo=bar', { json: false }, function(err, resp) {
|
---|
| 330 | // resp.body contains 'header' and 'body', mirroring what we sent
|
---|
| 331 | should.not.exist(resp.body.headers['content-type']);
|
---|
| 332 | done();
|
---|
| 333 | })
|
---|
| 334 | })
|
---|
| 335 |
|
---|
| 336 | it('doesnt change default Accept header', function(done) {
|
---|
| 337 | get('foo=bar', { json: false }, function(err, resp) {
|
---|
| 338 | // resp.body contains 'header' and 'body', mirroring what we sent
|
---|
| 339 | resp.body.headers['accept'].should.equal('*/*');
|
---|
| 340 | done();
|
---|
| 341 | })
|
---|
| 342 | })
|
---|
| 343 |
|
---|
| 344 | it('doesnt write anything', function(done) {
|
---|
| 345 | get('foo=bar', { json: false }, function(err, resp) {
|
---|
| 346 | spy.called.should.be.false;
|
---|
| 347 | resp.body.body.should.eql('');
|
---|
| 348 | done();
|
---|
| 349 | })
|
---|
| 350 | })
|
---|
| 351 |
|
---|
| 352 | })
|
---|
| 353 |
|
---|
| 354 | describe('with json: true', function() {
|
---|
| 355 |
|
---|
| 356 | it('sends request, without setting a querystring', function(done) {
|
---|
| 357 | spystub_request();
|
---|
| 358 |
|
---|
| 359 | get('foo=bar', { json: true }, function(err, resp) {
|
---|
| 360 | check_request('get');
|
---|
| 361 | stub.args[0][0]['path'].should.equal('/')
|
---|
| 362 | done();
|
---|
| 363 | })
|
---|
| 364 | })
|
---|
| 365 |
|
---|
| 366 | it('sets Content-Type header', function(done) {
|
---|
| 367 | get('foo=bar', { json: true }, function(err, resp) {
|
---|
| 368 | resp.body.headers['content-type'].should.equal('application/json; charset=utf-8');
|
---|
| 369 | done();
|
---|
| 370 | })
|
---|
| 371 | })
|
---|
| 372 |
|
---|
| 373 | it('set Accept header to application/json', function(done) {
|
---|
| 374 | get('foo=bar', { json: true }, function(err, resp) {
|
---|
| 375 | resp.body.headers['accept'].should.equal('application/json');
|
---|
| 376 | done();
|
---|
| 377 | })
|
---|
| 378 | })
|
---|
| 379 |
|
---|
| 380 | it('writes raw string (assuming it already is JSON, so no JSON.stringify)', function(done) {
|
---|
| 381 | get('foo=bar', { json: true }, function(err, resp) {
|
---|
| 382 | spy.called.should.be.true;
|
---|
| 383 | spy.args[0][0].toString().should.eql('foo=bar')
|
---|
| 384 | resp.body.body.should.eql('foo=bar');
|
---|
| 385 | done();
|
---|
| 386 | })
|
---|
| 387 | })
|
---|
| 388 |
|
---|
| 389 | })
|
---|
| 390 |
|
---|
| 391 | })
|
---|
| 392 |
|
---|
| 393 | describe('post request', function() {
|
---|
| 394 |
|
---|
| 395 | describe('with json: false (default)', function() {
|
---|
| 396 |
|
---|
| 397 | it('sends request', function(done) {
|
---|
| 398 | spystub_request();
|
---|
| 399 |
|
---|
| 400 | post('foo=bar', { json: false }, function(err, resp) {
|
---|
| 401 | check_request('post');
|
---|
| 402 | done();
|
---|
| 403 | })
|
---|
| 404 | })
|
---|
| 405 |
|
---|
| 406 | it('sets Content-Type header to www-form-urlencoded', function(done) {
|
---|
| 407 | post('foo=bar', { json: false }, function(err, resp) {
|
---|
| 408 | resp.body.headers['content-type'].should.equal('application/x-www-form-urlencoded');
|
---|
| 409 | done();
|
---|
| 410 | })
|
---|
| 411 | })
|
---|
| 412 |
|
---|
| 413 | it('doesnt change default Accept header', function(done) {
|
---|
| 414 | post('foo=bar', { json: false }, function(err, resp) {
|
---|
| 415 | // resp.body contains 'header' and 'body', mirroring what we sent
|
---|
| 416 | resp.body.headers['accept'].should.equal('*/*');
|
---|
| 417 | done();
|
---|
| 418 | })
|
---|
| 419 | })
|
---|
| 420 |
|
---|
| 421 | it('writes as buffer', function(done) {
|
---|
| 422 | post('foo=bar', { json: false }, function(err, resp) {
|
---|
| 423 | spy.called.should.be.true;
|
---|
| 424 | spy.args[0][0].should.be.an.instanceof(Buffer);
|
---|
| 425 | spy.args[0][0].toString().should.equal('foo=bar');
|
---|
| 426 | resp.body.body.should.eql('foo=bar');
|
---|
| 427 | done();
|
---|
| 428 | })
|
---|
| 429 | })
|
---|
| 430 |
|
---|
| 431 | })
|
---|
| 432 |
|
---|
| 433 | describe('with json: true', function() {
|
---|
| 434 |
|
---|
| 435 | it('sends request', function(done) {
|
---|
| 436 | spystub_request();
|
---|
| 437 |
|
---|
| 438 | post('foo=bar', { json: true }, function(err, resp) {
|
---|
| 439 | check_request('post');
|
---|
| 440 | done();
|
---|
| 441 | })
|
---|
| 442 | })
|
---|
| 443 |
|
---|
| 444 | it('sets Content-Type header', function(done) {
|
---|
| 445 | post('foo=bar', { json: true }, function(err, resp) {
|
---|
| 446 | resp.body.headers['content-type'].should.equal('application/json; charset=utf-8');
|
---|
| 447 | done();
|
---|
| 448 | })
|
---|
| 449 | })
|
---|
| 450 |
|
---|
| 451 | it('set Accept header to application/json', function(done) {
|
---|
| 452 | post('foo=bar', { json: true }, function(err, resp) {
|
---|
| 453 | resp.body.headers['accept'].should.equal('application/json');
|
---|
| 454 | done();
|
---|
| 455 | })
|
---|
| 456 | })
|
---|
| 457 |
|
---|
| 458 | it('writes raw string (assuming it already is JSON, so no JSON.stringify)', function(done) {
|
---|
| 459 | post('foo=bar', { json: true }, function(err, resp) {
|
---|
| 460 | spy.called.should.be.true;
|
---|
| 461 | var json = JSON.stringify('foo=bar');
|
---|
| 462 | spy.args[0][0].toString().should.eql('foo=bar')
|
---|
| 463 | resp.body.body.should.eql('foo=bar');
|
---|
| 464 | done();
|
---|
| 465 | })
|
---|
| 466 | })
|
---|
| 467 |
|
---|
| 468 | })
|
---|
| 469 |
|
---|
| 470 | })
|
---|
| 471 |
|
---|
| 472 | })
|
---|
| 473 |
|
---|
| 474 | describe('when object', function() {
|
---|
| 475 |
|
---|
| 476 | describe('get request', function() {
|
---|
| 477 |
|
---|
| 478 | describe('with json: false (default)', function() {
|
---|
| 479 |
|
---|
| 480 | it('sends request, adding data as querystring', function(done) {
|
---|
| 481 | spystub_request();
|
---|
| 482 |
|
---|
| 483 | get({ foo: 'bar', test: '测试' }, { json: false }, function(err, resp) {
|
---|
| 484 | check_request('get');
|
---|
| 485 | stub.args[0][0]['path'].should.equal('/?foo=bar&test=%E6%B5%8B%E8%AF%95')
|
---|
| 486 | done();
|
---|
| 487 | })
|
---|
| 488 | })
|
---|
| 489 |
|
---|
| 490 | it('doesnt set Content-Type header', function(done) {
|
---|
| 491 | get({ foo: 'bar', test: '测试' }, { json: false }, function(err, resp) {
|
---|
| 492 | // resp.body contains 'header' and 'body', mirroring what we sent
|
---|
| 493 | should.not.exist(resp.body.headers['content-type']);
|
---|
| 494 | done();
|
---|
| 495 | })
|
---|
| 496 | })
|
---|
| 497 |
|
---|
| 498 | it('doesnt change default Accept header', function(done) {
|
---|
| 499 | get({ foo: 'bar', test: '测试' }, { json: false }, function(err, resp) {
|
---|
| 500 | // resp.body contains 'header' and 'body', mirroring what we sent
|
---|
| 501 | resp.body.headers['accept'].should.equal('*/*');
|
---|
| 502 | done();
|
---|
| 503 | })
|
---|
| 504 | })
|
---|
| 505 |
|
---|
| 506 | it('doesnt write anything', function(done) {
|
---|
| 507 | get({ foo: 'bar', test: '测试' }, { json: false }, function(err, resp) {
|
---|
| 508 | spy.called.should.be.false;
|
---|
| 509 | resp.body.body.should.eql('');
|
---|
| 510 | done();
|
---|
| 511 | })
|
---|
| 512 | })
|
---|
| 513 |
|
---|
| 514 | })
|
---|
| 515 |
|
---|
| 516 | describe('with json: true', function() {
|
---|
| 517 |
|
---|
| 518 | it('sends request, without setting a querystring', function(done) {
|
---|
| 519 | spystub_request();
|
---|
| 520 |
|
---|
| 521 | get({ foo: 'bar', test: '测试' }, { json: true }, function(err, resp) {
|
---|
| 522 | check_request('get');
|
---|
| 523 | stub.args[0][0]['path'].should.equal('/')
|
---|
| 524 | done();
|
---|
| 525 | })
|
---|
| 526 | })
|
---|
| 527 |
|
---|
| 528 | it('sets Content-Type header', function(done) {
|
---|
| 529 | get({ foo: 'bar', test: '测试' }, { json: true }, function(err, resp) {
|
---|
| 530 | resp.body.headers['content-type'].should.equal('application/json; charset=utf-8');
|
---|
| 531 | done();
|
---|
| 532 | })
|
---|
| 533 | })
|
---|
| 534 |
|
---|
| 535 | it('set Accept header to application/json', function(done) {
|
---|
| 536 | get({ foo: 'bar', test: '测试' }, { json: true }, function(err, resp) {
|
---|
| 537 | resp.body.headers['accept'].should.equal('application/json');
|
---|
| 538 | done();
|
---|
| 539 | })
|
---|
| 540 | })
|
---|
| 541 |
|
---|
| 542 | it('writes JSON.stringify version of object', function(done) {
|
---|
| 543 | get({ foo: 'bar', test: '测试' }, { json: true }, function(err, resp) {
|
---|
| 544 | spy.called.should.be.true;
|
---|
| 545 | var json = JSON.stringify({ foo: 'bar', test: '测试' })
|
---|
| 546 | spy.args[0][0].toString().should.eql(json)
|
---|
| 547 | resp.body.body.should.eql(json);
|
---|
| 548 | done();
|
---|
| 549 | })
|
---|
| 550 | })
|
---|
| 551 |
|
---|
| 552 | })
|
---|
| 553 |
|
---|
| 554 | })
|
---|
| 555 |
|
---|
| 556 | describe('post request', function() {
|
---|
| 557 |
|
---|
| 558 | describe('with json: false (default)', function() {
|
---|
| 559 |
|
---|
| 560 | it('sends request', function(done) {
|
---|
| 561 | spystub_request();
|
---|
| 562 |
|
---|
| 563 | post({ foo: 'bar', test: '测试' }, { json: false }, function(err, resp) {
|
---|
| 564 | check_request('post');
|
---|
| 565 | done();
|
---|
| 566 | })
|
---|
| 567 | })
|
---|
| 568 |
|
---|
| 569 | it('sets Content-Type header to www-form-urlencoded', function(done) {
|
---|
| 570 | post({ foo: 'bar', test: '测试' }, { json: false }, function(err, resp) {
|
---|
| 571 | resp.body.headers['content-type'].should.equal('application/x-www-form-urlencoded');
|
---|
| 572 | done();
|
---|
| 573 | })
|
---|
| 574 | })
|
---|
| 575 |
|
---|
| 576 | it('doesnt change default Accept header', function(done) {
|
---|
| 577 | post({ foo: 'bar', test: '测试' }, { json: false }, function(err, resp) {
|
---|
| 578 | // resp.body contains 'header' and 'body', mirroring what we sent
|
---|
| 579 | resp.body.headers['accept'].should.equal('*/*');
|
---|
| 580 | done();
|
---|
| 581 | })
|
---|
| 582 | })
|
---|
| 583 |
|
---|
| 584 | it('writes as buffer', function(done) {
|
---|
| 585 | post({ foo: 'bar', test: '测试' }, { json: false }, function(err, resp) {
|
---|
| 586 | spy.called.should.be.true;
|
---|
| 587 | spy.args[0][0].should.be.an.instanceof(Buffer);
|
---|
| 588 | spy.args[0][0].toString().should.equal('foo=bar&test=%E6%B5%8B%E8%AF%95');
|
---|
| 589 | resp.body.body.should.eql('foo=bar&test=%E6%B5%8B%E8%AF%95');
|
---|
| 590 | done();
|
---|
| 591 | })
|
---|
| 592 | })
|
---|
| 593 |
|
---|
| 594 | })
|
---|
| 595 |
|
---|
| 596 | describe('with json: false and content_type = "application/json"', function() {
|
---|
| 597 |
|
---|
| 598 | var opts = { json: false, content_type: 'application/json' };
|
---|
| 599 |
|
---|
| 600 | it('sends request', function(done) {
|
---|
| 601 | spystub_request();
|
---|
| 602 |
|
---|
| 603 | post({ foo: 'bar', test: '测试' }, opts, function(err, resp) {
|
---|
| 604 | check_request('post');
|
---|
| 605 | done();
|
---|
| 606 | })
|
---|
| 607 | })
|
---|
| 608 |
|
---|
| 609 | it('sets Content-Type header to application/json', function(done) {
|
---|
| 610 | post({ foo: 'bar', test: '测试' }, opts, function(err, resp) {
|
---|
| 611 | resp.body.headers['content-type'].should.equal('application/json');
|
---|
| 612 | done();
|
---|
| 613 | })
|
---|
| 614 | })
|
---|
| 615 |
|
---|
| 616 | it('doesnt change default Accept header', function(done) {
|
---|
| 617 | post({ foo: 'bar', test: '测试' }, opts, function(err, resp) {
|
---|
| 618 | // resp.body contains 'header' and 'body', mirroring what we sent
|
---|
| 619 | resp.body.headers['accept'].should.equal('*/*');
|
---|
| 620 | done();
|
---|
| 621 | })
|
---|
| 622 | })
|
---|
| 623 |
|
---|
| 624 | it('writes as buffer', function(done) {
|
---|
| 625 | post({ foo: 'bar', test: '测试' }, opts, function(err, resp) {
|
---|
| 626 | spy.called.should.be.true;
|
---|
| 627 | spy.args[0][0].constructor.name.should.eql('Buffer');
|
---|
| 628 | spy.args[0][0].toString().should.equal('foo=bar&test=%E6%B5%8B%E8%AF%95');
|
---|
| 629 | resp.body.body.should.eql('foo=bar&test=%E6%B5%8B%E8%AF%95');
|
---|
| 630 | done();
|
---|
| 631 | })
|
---|
| 632 | })
|
---|
| 633 |
|
---|
| 634 | })
|
---|
| 635 |
|
---|
| 636 | describe('with json: undefined but content-type = application/json', function() {
|
---|
| 637 |
|
---|
| 638 | var opts = { headers: { 'content-type': 'application/json' } };
|
---|
| 639 |
|
---|
| 640 | it('sends request', function(done) {
|
---|
| 641 | spystub_request();
|
---|
| 642 |
|
---|
| 643 | post({ foo: 'bar', test: '测试' }, opts, function(err, resp) {
|
---|
| 644 | check_request('post');
|
---|
| 645 | done();
|
---|
| 646 | })
|
---|
| 647 | })
|
---|
| 648 |
|
---|
| 649 | it('doesnt change Content-Type header', function(done) {
|
---|
| 650 | post({ foo: 'bar', test: '测试' }, opts, function(err, resp) {
|
---|
| 651 | resp.body.headers['content-type'].should.equal('application/json');
|
---|
| 652 | done();
|
---|
| 653 | })
|
---|
| 654 | })
|
---|
| 655 |
|
---|
| 656 | it('leaves default Accept header', function(done) {
|
---|
| 657 | post({ foo: 'bar', test: '测试' }, opts, function(err, resp) {
|
---|
| 658 | resp.body.headers['accept'].should.equal('*/*');
|
---|
| 659 | done();
|
---|
| 660 | })
|
---|
| 661 | })
|
---|
| 662 |
|
---|
| 663 | it('writes JSON.stringified object', function(done) {
|
---|
| 664 | post({ foo: 'bar', test: '测试' }, opts, function(err, resp) {
|
---|
| 665 | spy.called.should.be.true;
|
---|
| 666 | var json = JSON.stringify({ foo: 'bar', test: '测试' })
|
---|
| 667 | spy.args[0][0].toString().should.eql(json)
|
---|
| 668 | resp.body.body.should.eql(json);
|
---|
| 669 | done();
|
---|
| 670 | })
|
---|
| 671 | })
|
---|
| 672 | })
|
---|
| 673 |
|
---|
| 674 | describe('with json: true', function() {
|
---|
| 675 |
|
---|
| 676 | it('sends request', function(done) {
|
---|
| 677 | spystub_request();
|
---|
| 678 |
|
---|
| 679 | post({ foo: 'bar', test: '测试' }, { json: true }, function(err, resp) {
|
---|
| 680 | check_request('post');
|
---|
| 681 | done();
|
---|
| 682 | })
|
---|
| 683 | })
|
---|
| 684 |
|
---|
| 685 | it('sets Content-Type header', function(done) {
|
---|
| 686 | post({ foo: 'bar', test: '测试' }, { json: true }, function(err, resp) {
|
---|
| 687 | resp.body.headers['content-type'].should.equal('application/json; charset=utf-8');
|
---|
| 688 | done();
|
---|
| 689 | })
|
---|
| 690 | })
|
---|
| 691 |
|
---|
| 692 | it('set Accept header to application/json', function(done) {
|
---|
| 693 | post({ foo: 'bar', test: '测试' }, { json: true }, function(err, resp) {
|
---|
| 694 | resp.body.headers['accept'].should.equal('application/json');
|
---|
| 695 | done();
|
---|
| 696 | })
|
---|
| 697 | })
|
---|
| 698 |
|
---|
| 699 | it('writes JSON.stringified object', function(done) {
|
---|
| 700 | post({ foo: 'bar', test: '测试' }, { json: true }, function(err, resp) {
|
---|
| 701 | spy.called.should.be.true;
|
---|
| 702 | var json = JSON.stringify({ foo: 'bar', test: '测试' })
|
---|
| 703 | spy.args[0][0].toString().should.eql(json)
|
---|
| 704 | resp.body.body.should.eql(json);
|
---|
| 705 | done();
|
---|
| 706 | })
|
---|
| 707 | })
|
---|
| 708 |
|
---|
| 709 | })
|
---|
| 710 |
|
---|
| 711 |
|
---|
| 712 | describe('with json: true and content_type: */* (passed, not default)', function() {
|
---|
| 713 |
|
---|
| 714 | var opts = { json: true, accept: '*/*' };
|
---|
| 715 |
|
---|
| 716 | it('sends request', function(done) {
|
---|
| 717 | spystub_request();
|
---|
| 718 |
|
---|
| 719 | post({ foo: 'bar', test: '测试' }, opts, function(err, resp) {
|
---|
| 720 | check_request('post');
|
---|
| 721 | done();
|
---|
| 722 | })
|
---|
| 723 | })
|
---|
| 724 |
|
---|
| 725 | it('sets Content-Type header to application/json', function(done) {
|
---|
| 726 | post({ foo: 'bar', test: '测试' }, opts, function(err, resp) {
|
---|
| 727 | resp.body.headers['content-type'].should.equal('application/json; charset=utf-8');
|
---|
| 728 | done();
|
---|
| 729 | })
|
---|
| 730 | })
|
---|
| 731 |
|
---|
| 732 | it('respects Accept header set by user', function(done) {
|
---|
| 733 | post({ foo: 'bar', test: '测试' }, opts, function(err, resp) {
|
---|
| 734 | resp.body.headers['accept'].should.equal('*/*');
|
---|
| 735 | done();
|
---|
| 736 | })
|
---|
| 737 | })
|
---|
| 738 |
|
---|
| 739 | it('writes JSON.stringified object', function(done) {
|
---|
| 740 | post({ foo: 'bar', test: '测试' }, opts, function(err, resp) {
|
---|
| 741 | spy.called.should.be.true;
|
---|
| 742 | var json = JSON.stringify({ foo: 'bar', test: '测试' })
|
---|
| 743 | spy.args[0][0].toString().should.eql(json)
|
---|
| 744 | resp.body.body.should.eql(json);
|
---|
| 745 | done();
|
---|
| 746 | })
|
---|
| 747 | })
|
---|
| 748 |
|
---|
| 749 | })
|
---|
| 750 |
|
---|
| 751 | })
|
---|
| 752 |
|
---|
| 753 | })
|
---|
| 754 |
|
---|
| 755 | describe('when buffer', function() {
|
---|
| 756 |
|
---|
| 757 | describe('get request', function() {
|
---|
| 758 |
|
---|
| 759 | describe('with json: false (default)', function() {
|
---|
| 760 |
|
---|
| 761 | it('sends request', function(done) {
|
---|
| 762 | spystub_request();
|
---|
| 763 |
|
---|
| 764 | get(Buffer.from('foobar'), { json: false }, function(err, resp) {
|
---|
| 765 | check_request('get');
|
---|
| 766 | done();
|
---|
| 767 | })
|
---|
| 768 | })
|
---|
| 769 |
|
---|
| 770 | it('sets Content-Type header', function(done) {
|
---|
| 771 | get(Buffer.from('foobar'), { json: false }, function(err, resp) {
|
---|
| 772 | // should.not.exist(resp.body.headers['content-type']);
|
---|
| 773 | resp.body.headers['content-type'].should.equal('application/x-www-form-urlencoded');
|
---|
| 774 |
|
---|
| 775 | done();
|
---|
| 776 | })
|
---|
| 777 | })
|
---|
| 778 |
|
---|
| 779 | it('doesnt change default Accept header', function(done) {
|
---|
| 780 | get(Buffer.from('foobar'), { json: false }, function(err, resp) {
|
---|
| 781 | // resp.body contains 'header' and 'body', mirroring what we sent
|
---|
| 782 | resp.body.headers['accept'].should.equal('*/*');
|
---|
| 783 | done();
|
---|
| 784 | })
|
---|
| 785 | })
|
---|
| 786 |
|
---|
| 787 | it('writes as buffer', function(done) {
|
---|
| 788 | get(Buffer.from('foobar'), { json: false }, function(err, resp) {
|
---|
| 789 | spy.called.should.be.true;
|
---|
| 790 | spy.args[0][0].should.be.an.instanceof(Buffer);
|
---|
| 791 | spy.args[0][0].toString().should.equal('foobar');
|
---|
| 792 | resp.body.body.should.eql('foobar');
|
---|
| 793 | done();
|
---|
| 794 | })
|
---|
| 795 | })
|
---|
| 796 |
|
---|
| 797 | })
|
---|
| 798 |
|
---|
| 799 | describe('with json: true', function() {
|
---|
| 800 |
|
---|
| 801 | it('sends request, without setting a querystring', function(done) {
|
---|
| 802 | spystub_request();
|
---|
| 803 |
|
---|
| 804 | get(Buffer.from('foobar'), { json: true }, function(err, resp) {
|
---|
| 805 | check_request('get');
|
---|
| 806 | done();
|
---|
| 807 | })
|
---|
| 808 | })
|
---|
| 809 |
|
---|
| 810 | it('sets Content-Type header', function(done) {
|
---|
| 811 | get(Buffer.from('foobar'), { json: true }, function(err, resp) {
|
---|
| 812 | resp.body.headers['content-type'].should.equal('application/json; charset=utf-8');
|
---|
| 813 | done();
|
---|
| 814 | })
|
---|
| 815 | })
|
---|
| 816 |
|
---|
| 817 | it('set Accept header to application/json', function(done) {
|
---|
| 818 | get(Buffer.from('foobar'), { json: true }, function(err, resp) {
|
---|
| 819 | resp.body.headers['accept'].should.equal('application/json');
|
---|
| 820 | done();
|
---|
| 821 | })
|
---|
| 822 | })
|
---|
| 823 |
|
---|
| 824 | it('writes JSON.stringify version of object', function(done) {
|
---|
| 825 | get(Buffer.from('foobar'), { json: true }, function(err, resp) {
|
---|
| 826 | spy.called.should.be.true;
|
---|
| 827 | spy.args[0][0].toString().should.eql('foobar')
|
---|
| 828 | resp.body.body.should.eql('foobar');
|
---|
| 829 | done();
|
---|
| 830 | })
|
---|
| 831 | })
|
---|
| 832 |
|
---|
| 833 | })
|
---|
| 834 |
|
---|
| 835 | })
|
---|
| 836 |
|
---|
| 837 | describe('post request', function() {
|
---|
| 838 |
|
---|
| 839 | describe('with json: false (default)', function() {
|
---|
| 840 |
|
---|
| 841 | it('sends request', function(done) {
|
---|
| 842 | spystub_request();
|
---|
| 843 |
|
---|
| 844 | post(Buffer.from('foobar'), { json: false }, function(err, resp) {
|
---|
| 845 | check_request('post');
|
---|
| 846 | done();
|
---|
| 847 | })
|
---|
| 848 | })
|
---|
| 849 |
|
---|
| 850 | it('sets Content-Type header to www-form-urlencoded', function(done) {
|
---|
| 851 | post(Buffer.from('foobar'), { json: false }, function(err, resp) {
|
---|
| 852 | resp.body.headers['content-type'].should.equal('application/x-www-form-urlencoded');
|
---|
| 853 | done();
|
---|
| 854 | })
|
---|
| 855 | })
|
---|
| 856 |
|
---|
| 857 | it('doesnt change default Accept header', function(done) {
|
---|
| 858 | post(Buffer.from('foobar'), { json: false }, function(err, resp) {
|
---|
| 859 | // resp.body contains 'header' and 'body', mirroring what we sent
|
---|
| 860 | resp.body.headers['accept'].should.equal('*/*');
|
---|
| 861 | done();
|
---|
| 862 | })
|
---|
| 863 | })
|
---|
| 864 |
|
---|
| 865 | it('writes as buffer', function(done) {
|
---|
| 866 | post(Buffer.from('foobar'), { json: false }, function(err, resp) {
|
---|
| 867 | spy.called.should.be.true;
|
---|
| 868 | spy.args[0][0].should.be.an.instanceof(Buffer);
|
---|
| 869 | spy.args[0][0].toString().should.equal('foobar');
|
---|
| 870 | resp.body.body.should.eql('foobar');
|
---|
| 871 | done();
|
---|
| 872 | })
|
---|
| 873 | })
|
---|
| 874 |
|
---|
| 875 | })
|
---|
| 876 |
|
---|
| 877 | describe('with json: true', function() {
|
---|
| 878 |
|
---|
| 879 | it('sends request', function(done) {
|
---|
| 880 | spystub_request();
|
---|
| 881 |
|
---|
| 882 | post(Buffer.from('foobar'), { json: true }, function(err, resp) {
|
---|
| 883 | check_request('post');
|
---|
| 884 | done();
|
---|
| 885 | })
|
---|
| 886 | })
|
---|
| 887 |
|
---|
| 888 | it('sets Content-Type header', function(done) {
|
---|
| 889 | post(Buffer.from('foobar'), { json: true }, function(err, resp) {
|
---|
| 890 | resp.body.headers['content-type'].should.equal('application/json; charset=utf-8');
|
---|
| 891 | done();
|
---|
| 892 | })
|
---|
| 893 | })
|
---|
| 894 |
|
---|
| 895 | it('set Accept header to application/json', function(done) {
|
---|
| 896 | post(Buffer.from('foobar'), { json: true }, function(err, resp) {
|
---|
| 897 | resp.body.headers['accept'].should.equal('application/json');
|
---|
| 898 | done();
|
---|
| 899 | })
|
---|
| 900 | })
|
---|
| 901 |
|
---|
| 902 | it('passes raw buffer (assuming its a JSON string beneath)', function(done) {
|
---|
| 903 | post(Buffer.from('foobar'), { json: true }, function(err, resp) {
|
---|
| 904 | spy.called.should.be.true;
|
---|
| 905 | spy.args[0][0].toString().should.eql('foobar')
|
---|
| 906 | resp.body.body.should.eql('foobar');
|
---|
| 907 | done();
|
---|
| 908 | })
|
---|
| 909 | })
|
---|
| 910 |
|
---|
| 911 | })
|
---|
| 912 |
|
---|
| 913 | })
|
---|
| 914 |
|
---|
| 915 | })
|
---|
| 916 |
|
---|
| 917 | describe('when stream', function() {
|
---|
| 918 |
|
---|
| 919 | var input_stream;
|
---|
| 920 |
|
---|
| 921 | beforeEach(function() {
|
---|
| 922 | input_stream = new stream.Readable();
|
---|
| 923 | input_stream._read = function() {
|
---|
| 924 | this.push('foobar');
|
---|
| 925 | this.push(null);
|
---|
| 926 | }
|
---|
| 927 | })
|
---|
| 928 |
|
---|
| 929 | describe('get request', function() {
|
---|
| 930 |
|
---|
| 931 | it('explodes', function() {
|
---|
| 932 | (function() {
|
---|
| 933 | get(input_stream, {})
|
---|
| 934 | }).should.throw()
|
---|
| 935 | })
|
---|
| 936 |
|
---|
| 937 | });
|
---|
| 938 |
|
---|
| 939 | describe('post request', function() {
|
---|
| 940 |
|
---|
| 941 | describe('with json: false (default)', function() {
|
---|
| 942 |
|
---|
| 943 | it('sends request', function(done) {
|
---|
| 944 | spystub_request();
|
---|
| 945 |
|
---|
| 946 | post(input_stream, { json: false }, function(err, resp) {
|
---|
| 947 | check_request('post');
|
---|
| 948 | done();
|
---|
| 949 | })
|
---|
| 950 | })
|
---|
| 951 |
|
---|
| 952 | it('sets Content-Type header to www-form-urlencoded', function(done) {
|
---|
| 953 | post(input_stream, { json: false }, function(err, resp) {
|
---|
| 954 | resp.body.headers['content-type'].should.equal('application/x-www-form-urlencoded');
|
---|
| 955 | done();
|
---|
| 956 | })
|
---|
| 957 | })
|
---|
| 958 |
|
---|
| 959 | it('doesnt change default Accept header', function(done) {
|
---|
| 960 | post(input_stream, { json: false }, function(err, resp) {
|
---|
| 961 | // resp.body contains 'header' and 'body', mirroring what we sent
|
---|
| 962 | resp.body.headers['accept'].should.equal('*/*');
|
---|
| 963 | done();
|
---|
| 964 | })
|
---|
| 965 | })
|
---|
| 966 |
|
---|
| 967 | it('writes as buffer', function(done) {
|
---|
| 968 | post(input_stream, { json: false }, function(err, resp) {
|
---|
| 969 | spy.called.should.be.true;
|
---|
| 970 | spy.args[0][0].should.be.an.instanceof(Buffer);
|
---|
| 971 | spy.args[0][0].toString().should.equal('foobar');
|
---|
| 972 | resp.body.body.should.eql('foobar');
|
---|
| 973 | done();
|
---|
| 974 | })
|
---|
| 975 | })
|
---|
| 976 |
|
---|
| 977 | })
|
---|
| 978 |
|
---|
| 979 | describe('with json: true', function() {
|
---|
| 980 |
|
---|
| 981 | it('sends request', function(done) {
|
---|
| 982 | spystub_request();
|
---|
| 983 |
|
---|
| 984 | post(input_stream, { json: true }, function(err, resp) {
|
---|
| 985 | check_request('post');
|
---|
| 986 | done();
|
---|
| 987 | })
|
---|
| 988 | })
|
---|
| 989 |
|
---|
| 990 | it('sets Content-Type header', function(done) {
|
---|
| 991 | post(input_stream, { json: true }, function(err, resp) {
|
---|
| 992 | resp.body.headers['content-type'].should.equal('application/json; charset=utf-8');
|
---|
| 993 | done();
|
---|
| 994 | })
|
---|
| 995 | })
|
---|
| 996 |
|
---|
| 997 | it('set Accept header to application/json', function(done) {
|
---|
| 998 | post(input_stream, { json: true }, function(err, resp) {
|
---|
| 999 | resp.body.headers['accept'].should.equal('application/json');
|
---|
| 1000 | done();
|
---|
| 1001 | })
|
---|
| 1002 | })
|
---|
| 1003 |
|
---|
| 1004 | it('writes JSON.stringified object', function(done) {
|
---|
| 1005 | post(input_stream, { json: true }, function(err, resp) {
|
---|
| 1006 | spy.called.should.be.true;
|
---|
| 1007 | spy.args[0][0].toString().should.eql('foobar')
|
---|
| 1008 | resp.body.body.should.eql('foobar');
|
---|
| 1009 | done();
|
---|
| 1010 | })
|
---|
| 1011 | })
|
---|
| 1012 |
|
---|
| 1013 | })
|
---|
| 1014 |
|
---|
| 1015 | })
|
---|
| 1016 |
|
---|
| 1017 | })
|
---|
| 1018 |
|
---|
| 1019 | })
|
---|
| 1020 |
|
---|
| 1021 | })
|
---|