Tôi có một ứng dụng Node.js sử dụng nhanh 4 và đây là bộ điều khiển của tôi:Làm thế nào để đơn vị kiểm tra một hàm gọi một hàm khác trả về một lời hứa?
var service = require('./category.service');
module.exports = {
findAll: (request, response) => {
service.findAll().then((categories) => {
response.status(200).send(categories);
}, (error) => {
response.status(error.statusCode || 500).json(error);
});
}
};
Nó gọi dịch vụ của tôi mà trả về một lời hứa. Tất cả mọi thứ hoạt động nhưng tôi gặp khó khăn khi cố gắng để đơn vị kiểm tra nó.
Về cơ bản, tôi muốn đảm bảo rằng dựa trên những gì dịch vụ của tôi trả về, tôi xóa phản hồi bằng đúng mã trạng thái và nội dung.
Vì vậy, với mocha và Sinon nó trông giống như sau:
it('Should call service to find all the categories', (done) => {
// Arrange
var expectedCategories = ['foo', 'bar'];
var findAllStub = sandbox.stub(service, 'findAll');
findAllStub.resolves(expectedCategories);
var response = {
status:() => { return response; },
send:() => {}
};
sandbox.spy(response, 'status');
sandbox.spy(response, 'send');
// Act
controller.findAll({}, response);
// Assert
expect(findAllStub.called).to.be.ok;
expect(findAllStub.callCount).to.equal(1);
expect(response.status).to.be.calledWith(200); // not working
expect(response.send).to.be.called; // not working
done();
});
Tôi đã thử nghiệm các tình huống tương tự của tôi khi chức năng Tôi đang thử nghiệm trở lại bản thân một lời hứa kể từ khi tôi có thể treo khẳng định của tôi trong đó.
Tôi cũng đã cố gắng bọc bộ điều khiển.findAll with a Promise và giải quyết nó từ response.send nhưng nó không hoạt động.
Mọi chức năng gọi hàm trả lời hứa là không đồng bộ và phải trả lại lời hứa. Nếu bạn chỉ gọi lại, bạn phải quay lại thử nghiệm API dựa trên cuộc gọi lại. – Bergi
Bạn đang sử dụng Chai? Nếu vậy, http://chaijs.com/plugins/chai-as-promised/ –
Có nhưng chức năng tôi đang thử nghiệm không trả về chuỗi lời hứa con trai như đã hứa sẽ không giúp đỡ – jbernal