Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js sinon-检查返回的响应对象是否与所需对象匹配_Node.js_Sinon_Chai - Fatal编程技术网

Node.js sinon-检查返回的响应对象是否与所需对象匹配

Node.js sinon-检查返回的响应对象是否与所需对象匹配,node.js,sinon,chai,Node.js,Sinon,Chai,我使用sinon spy来监视HTTP响应状态并发送。 我在json中以“send”形式返回的对象如下: { message: 'bla bla', fields: { request_id ='000', user_id = '3434324' } } 如何检查返回的响应是否包含这样的对象、结构和值 这是我的密码: var responseStatusSpy = sandbox.spy(res, 'status'); var responseSendSpy = sandbox.spy(re

我使用sinon spy来监视HTTP响应状态并发送。 我在json中以“send”形式返回的对象如下:

{
message: 'bla bla',
fields: { request_id ='000', user_id = '3434324' } 
}
如何检查返回的响应是否包含这样的对象、结构和值

这是我的密码:

var responseStatusSpy = sandbox.spy(res, 'status');
var responseSendSpy = sandbox.spy(res, 'send');
var response_object = {message: "invalid request - no merchant id", fields: {'request_id':'0000', 'user_id' = '2323223'}};

merchantController.getList(req, res);
responseSendSpy.withArgs ?????

提前感谢。

我提供了一个使用Express控制器的工作示例,因为您的代码在某些部分被破坏。不要担心依赖关系-无论您使用的是什么框架,原则都是相同的

controller.js test.js 首先使用第三方HTTP req/res模拟库创建有效的请求和响应对象。接下来,在响应的
send()
方法上设置一个间谍,并附加一个事件侦听器,以便在发送响应时调用

然后,我们不再显式地调用控制器的服务方法,而是通过路由器发送请求,以便能够自然地处理它

最后,在事件侦听器中设置断言,并根据预期对象验证响应体


使用此方法,您可以在路由和实现级别上验证快乐/悲伤路径

我提供了一个使用Express控制器的工作示例,因为您的代码在某些部分被破坏。不要担心依赖关系-无论您使用的是什么框架,原则都是相同的

controller.js test.js 首先使用第三方HTTP req/res模拟库创建有效的请求和响应对象。接下来,在响应的
send()
方法上设置一个间谍,并附加一个事件侦听器,以便在发送响应时调用

然后,我们不再显式地调用控制器的服务方法,而是通过路由器发送请求,以便能够自然地处理它

最后,在事件侦听器中设置断言,并根据预期对象验证响应体


使用此方法,您可以在路由和实现级别上验证快乐/悲伤路径

sinon.assert.calledExactlyWith(responseSendSpy,response\u对象)
。检查文档的
assert
部分:)@VsevolodGoloviznin,我收到一个错误“sinon.assert.calledExactlyWith”检查这些方法的引用,我可能拼写错误
sinon.assert.calledExactlyWith(responseSendSpy,response\u object)
。检查文档的
assert
部分:)@VsevolodGoloviznin,我收到一个错误“sinon.assert.calledExactlyWith”,检查这些方法的引用,我可能拼写错误
var express = require('express');
var router = express.Router();

router.get('/example', function(req, res) {

  res.send({
    message: 'bla bla',
    fields: {
      request_id: '000',
      user_id: '3434324'
    }
  });


});


module.exports = router;
'use strict';

const chai = require('chai');
const sinon = require('sinon');
const SinonChai = require('sinon-chai');

var sinonStubPromise = require('sinon-stub-promise');
sinonStubPromise(sinon);
require('sinon-mongoose');

chai.use(SinonChai);
chai.should();

const mockHttp = require('node-mocks-http');

const controller = require('./controller');


context('Test', () => {


  beforeEach(() => {
    if (!this.sandbox) {
      this.sandbox = sinon.sandbox.create();
    } else {
      this.sandbox.restore();
    }
  });


  it('should pass the test',
    (done) => {

      // Mocking req and res with node-mocks-http
      let req = mockHttp.createRequest({
        method: 'GET',
        url: '/example'
      });

      let res = mockHttp.createResponse({
        eventEmitter: require('events').EventEmitter
      });

      // spy on the response status
      this.sandbox.spy(res, 'send');

      var response_object = {
        message: 'bla bla',
        fields: {
          request_id: '000',
          user_id: '3434324'
        }
      };

      res.on('end', function() {
        try {
          res.send.should.have.been.calledWith(response_object);
          done();
        } catch (e) {
          done(e);
        }
      });

      controller.handle(req, res);

    });

});