Мой метод принимает http.ServerResponse
и вызывает для него некоторые методы. Глядя на документы Sinon, кажется, что это должно быть тривиально. однако я получаю либо TypeError: response.writeHead is not a function
, если я не устанавливаю ожидание, либо TypeError: Attempted to wrap undefined property writeHead as function
, если я его устанавливаю.
var http = require('http'),
sinon = require('sinon'),
ServerResponse = http.ServerResponse;
function SendWelcomeResponse(response) {
var body = 'Hello World!';
response.writeHead(200, {'Content-Type': 'text/plain', 'Content-Length': body.length});
response.write(body);
response.end();
}
describe('Using Sinon I should be able to mock the ServerResponse', function () {
it.only('should mock correctly', function () {
var mockServerResponse = sinon.mock(ServerResponse);
mockServerResponse.expects('writeHead').once();
SendWelcomeResponse(mockServerResponse);
});
});
Вручную катите объект для имитации
Я только что попробовал два предложения ниже, они дают TypeError: response.writeHead is not a function
.
var sinon = require('sinon'),
stubServerResponse = {
writeHead: function(statusCode, headers) {},
write: function(body){},
end: function() {}
};
function SendWelcomeResponse(response) {
var body = 'Hello World!';
response.writeHead(200, {'Content-Type': 'text/plain', 'Content-Length': body.length});
response.write(body);
response.end();
}
describe('Using Sinon I should be able to mock the ServerResponse', function () {
it.only('should mock correctly', function () {
var mockServerResponse = sinon.mock(stubServerResponse);
mockServerResponse.expects('writeHead').once();
SendWelcomeResponse(mockServerResponse);
});
});
Работает!
Волшебство заключалось в решениях, предложенных ниже, и использовании свойства .object
фиктивного объекта, а не самого объекта. Ниже приведены зеленые тесты!
var sinon = require('sinon'),
stubServerResponse = {
writeHead: function(statusCode, headers) {},
write: function(body){},
end: function() {}
};
function SendWelcomeResponse(response) {
var body = 'Hello World!';
response.writeHead(200, {'Content-Type': 'text/plain', 'Content-Length': body.length});
response.write(body);
response.end();
}
describe('Using Sinon I should be able to mock the ServerResponse', function () {
it.only('should mock correctly', function () {
var mockServerResponse = sinon.mock(stubServerResponse);
mockServerResponse.expects('writeHead').once();
SendWelcomeResponse(mockServerResponse.object);
});
});