ΠΡΠ΅ΠΌ ΠΏΡΠΈΠ²Π΅Ρ,
Π² Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π΅ ΠΌΠΎΠΈΡ
ΡΠ°ΠΉΠ»ΠΎΠ² Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π» ΠΌΠ΅ΡΠΎΠ΄ Π½ΠΈΠΆΠ΅ -
var request = require('request');
request(url, function(error, response, body) {
if (!error && response.statusCode === 200) {
ΠΊΠ°ΠΊ ΠΌΠ½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ Π² ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΠΎΠΌ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ?
ΡΠΆΠ΅ ΠΏΡΠΎΠ±ΠΎΠ²Π°Π» sinon.stub (Π·Π°ΠΏΡΠΎΡ), Π½ΠΎ ΡΡΠΎ Π½Π΅ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ.
@simov ΡΠΆΠ΅ ΠΏΡΠΎΠ±ΠΎΠ²Π°Π», Π½ΠΎ Π½Π΅
ΠΠΎΠΏΡΠΎΠ±ΡΠΉΡΠ΅ proxyquire :
var proxyquire = require('proxyquire');
var requestSpy = jasmine.createSpy();
var myFile = proxyquire('../../file/that/requires/request', {
request: requestSpy,
});
describe('the test', function() {
it('should use the mock', function() {
myFile.makeARequest();
expect(requestSpy).toHaveBeenCalledWith(jasmine.objectContaining({
headers: jasmine.objectContaining({
Accept: 'application/json',
}),
method: 'GET',
}), jasmine.any(Function));
});
});
ΠΡΠΈΠΌΠ΅Ρ: http://vansande.org/2015/03/22/unit_testing_with_mocks_in_node_js/
ΠΠ»ΠΈ mock-require
var mock = require('mock-require');
var requestSpy = jasmine.createSpy();
mock('request', requestSpy);
var myFile = require('../../file/that/requires/request');
describe('the test', function() {
it('should use the mock', function() {
myFile.makeARequest();
expect(requestSpy).toHaveBeenCalled();
// and you should be able to invoke the callback also, e.g.
// var callback = requestSpy.calls.first().args[1];
// expect(callback(/* vars */))...
});
});
ΠΡΠ° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π±ΡΠ»Π° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΠΎΠΌΠ΅ΡΠ΅Π½Π° ΠΊΠ°ΠΊ ΡΡΡΠ°ΡΠ΅Π²ΡΠ°Ρ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π² ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π΅ Π²ΡΠ΅ΠΌΡ Π½Π΅ Π±ΡΠ»ΠΎ Π°ΠΊΡΠΈΠ²Π½ΠΎΡΡΠΈ. ΠΠ½ Π±ΡΠ΄Π΅Ρ Π·Π°ΠΊΡΡΡ, Π΅ΡΠ»ΠΈ Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ Π±ΡΠ΄Π΅Ρ Π°ΠΊΡΠΈΠ²Π½ΠΎΡΡΠΈ. Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ Π·Π° Π²Π°Ρ Π²ΠΊΠ»Π°Π΄.
Π‘Π°ΠΌΡΠΉ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ
ΠΠΎΠΏΡΠΎΠ±ΡΠΉΡΠ΅ proxyquire :
ΠΡΠΈΠΌΠ΅Ρ: http://vansande.org/2015/03/22/unit_testing_with_mocks_in_node_js/
ΠΠ»ΠΈ mock-require