Node.js sinon-检查返回的响应对象是否与所需对象匹配
我使用sinon spy来监视HTTP响应状态并发送。 我在json中以“send”形式返回的对象如下: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
{
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);
});
});