рдЖрдкрдиреЗ рдХреНрдпрд╛ рд╣реЛрдиреЗ рдХреА рдЙрдореНрдореАрдж рдХреА рдереА?
рдореБрдЭреЗ рдПрдХ рдХрдХреНрд╖рд╛ рдореЗрдВ рдПрдХ рддреАрд░ рд╕рдорд╛рд░реЛрд╣ рдХреЛ рд░реЛрдХрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреА рдЙрдореНрдореАрдж рдереАред
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ
рдореИрдВ рдПрдХ рддреАрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╕реНрдЯрдм рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореИрдВ рдХреНрд▓рд╛рд╕ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╕реНрдЯрдм рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред
FAILED TESTS:
ExampleClass tests
├Ч should stub thisDoesntWork arrow function
Chrome 52.0.2743 (Windows 10 0.0.0)
TypeError: Attempted to wrap undefined property thisDoesntWork as function
at wrapMethod (webpack:///~/sinon/pkg/sinon.js:3138:0 <- test-bundler.js:7377:21)
at Object.stub (webpack:///~/sinon/pkg/sinon.js:2472:0 <- test-bundler.js:6711:12)
at Context.<anonymous> (webpack:///src/stores/sinon.test.ts:22:51 <- test-bundler.js:96197:72)
рдХреИрд╕реЗ рдкреБрди: рдкреЗрд╢ рдХрд░реЗрдВ
export class ExampleClass {
thisWorks() {
return 0;
}
thisDoesntWork = () => {
return 0;
}
}
describe("ExampleClass tests", () => {
it("should stub thisWorks function", () => {
let stubFunctionA = sinon.stub(ExampleClass.prototype, "thisWorks");
});
it("should stub thisDoesntWork arrow function", () => {
let stubFunctionB = sinon.stub(ExampleClass, "thisDoesntWork");
});
});
рдпрд╣ рдЖрдЧрд╛рдореА рдирдИ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рд╕рд╛рдЗрдЯ рдХреЗ рд▓рд┐рдП рднреЛрдЬрди рд╣реИ рдЬрд╣рд╛рдВ рд╣рдо ES2015 рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдХреБрдЫ рдФрд░ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдЙрдиреНрдореБрдЦ рд▓реЗрдЦ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВред
рдЖрдо рддреМрд░ рдкрд░ рдЬрдм рдЖрдк рдЗрд╕ рддрд░рд╣ рдХреЗ рдореБрджреНрджреЛрдВ рдкрд░ рдЖрддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рддрдереНрдп рдХреЛ рдпрд╛рдж рд░рдЦрдиреЗ рдореЗрдВ рдмрд╣реБрдд рдорджрджрдЧрд╛рд░ рд╣реЛрддрд╛ рд╣реИ: ES2015 рдЕрдХреНрд╕рд░ рд╕рд╛рдзрд╛рд░рдг ES5 рдирд┐рд░реНрдорд╛рдгреЛрдВ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рд╕рд┐рдВрдЯреИрдХреНрдЯрд┐рдХ рдЪреАрдиреА рд╣реЛрддрд╛ рд╣реИред рдорддрд▓рдм, рдЬрдм рдЖрдкрдХреЛ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рдХрд┐ рдХреБрдЫ рдХреНрдпреЛрдВ рд╣реЛрддрд╛ рд╣реИ (рдпрд╛ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ), рддреЛ рдХреЛрдб рдХреЛ рдЙрд╕рдХреЗ ES5 рд╕рдордХрдХреНрд╖ рдореЗрдВ рдмрджрд▓рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ (рдЬреЛ рдореИрдВрдиреЗ рдЕрднреА рдХрд┐рдпрд╛ рд╣реИ) рдмрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЛрдб рдХреЛ рдмреИрдмреЗрд▓ рдЦреЗрд▓ рдХреЗ рдореИрджрд╛рди рдореЗрдВ рдкреЗрд╕реНрдЯ рдХрд░рдирд╛ рд╣реИ рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ ES2015/ES6 рдХреЛрдб рдХреНрдпрд╛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ:
Babel . рд╕реЗ рдЯреНрд░рд╛рдВрд╕рдкрд┐рд▓реНрдб рдХреЛрдб
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
var ExampleClass = exports.ExampleClass = function () {
function ExampleClass() {
_classCallCheck(this, ExampleClass);
this.thisDoesntWork = function () {
return 0;
};
}
_createClass(ExampleClass, [{
key: "thisWorks",
value: function thisWorks() {
return 0;
}
}]);
return ExampleClass;
}();
рдкрд╣рд▓реА рдмрд╛рдд рдЬреЛ рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рддреАрд░ рдХреЗ рдХрд╛рд░реНрдп рдХреЗрд╡рд▓ _instance рддрд░реАрдХреЗ_ рд╣реИрдВред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдХреБрдЫ рдЪреАрдЬреЗрдВ рд╣реИрдВ:
рдпрд╣ рд╕рдм рдЬрд╛рдирддреЗ рд╣реБрдП, рдмрд╕ рдЕрдкрдиреА рдЕрд╕рдлрд▓ рдкрд░реАрдХреНрд╖рд╛ рдХреЛ рдЗрд╕ рдореЗрдВ рдмрджрд▓рдирд╛ рд╣реИ:
it("should stub thisDoesntWork arrow function", () => {
var example = new ExampleClass();
let stubFunctionB = sinon.stub(example, "thisDoesntWork", () => "actually it does work" );
});
рдЖрдкрдХреЛ рдХрд╛рдордпрд╛рдмреА рдорд┐рд▓реЗред
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдпрд╣ рдЖрдЧрд╛рдореА рдирдИ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рд╕рд╛рдЗрдЯ рдХреЗ рд▓рд┐рдП рднреЛрдЬрди рд╣реИ рдЬрд╣рд╛рдВ рд╣рдо ES2015 рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдХреБрдЫ рдФрд░ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдЙрдиреНрдореБрдЦ рд▓реЗрдЦ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВред
рдЖрдо рддреМрд░ рдкрд░ рдЬрдм рдЖрдк рдЗрд╕ рддрд░рд╣ рдХреЗ рдореБрджреНрджреЛрдВ рдкрд░ рдЖрддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рддрдереНрдп рдХреЛ рдпрд╛рдж рд░рдЦрдиреЗ рдореЗрдВ рдмрд╣реБрдд рдорджрджрдЧрд╛рд░ рд╣реЛрддрд╛ рд╣реИ: ES2015 рдЕрдХреНрд╕рд░ рд╕рд╛рдзрд╛рд░рдг ES5 рдирд┐рд░реНрдорд╛рдгреЛрдВ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рд╕рд┐рдВрдЯреИрдХреНрдЯрд┐рдХ рдЪреАрдиреА рд╣реЛрддрд╛ рд╣реИред рдорддрд▓рдм, рдЬрдм рдЖрдкрдХреЛ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рдХрд┐ рдХреБрдЫ рдХреНрдпреЛрдВ рд╣реЛрддрд╛ рд╣реИ (рдпрд╛ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ), рддреЛ рдХреЛрдб рдХреЛ рдЙрд╕рдХреЗ ES5 рд╕рдордХрдХреНрд╖ рдореЗрдВ рдмрджрд▓рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ (рдЬреЛ рдореИрдВрдиреЗ рдЕрднреА рдХрд┐рдпрд╛ рд╣реИ) рдмрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЛрдб рдХреЛ рдмреИрдмреЗрд▓ рдЦреЗрд▓ рдХреЗ рдореИрджрд╛рди рдореЗрдВ рдкреЗрд╕реНрдЯ рдХрд░рдирд╛ рд╣реИ рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ ES2015/ES6 рдХреЛрдб рдХреНрдпрд╛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ:
Babel . рд╕реЗ рдЯреНрд░рд╛рдВрд╕рдкрд┐рд▓реНрдб рдХреЛрдб
рдкрд╣рд▓реА рдмрд╛рдд рдЬреЛ рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рддреАрд░ рдХреЗ рдХрд╛рд░реНрдп рдХреЗрд╡рд▓ _instance рддрд░реАрдХреЗ_ рд╣реИрдВред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдХреБрдЫ рдЪреАрдЬреЗрдВ рд╣реИрдВ:
рдпрд╣ рд╕рдм рдЬрд╛рдирддреЗ рд╣реБрдП, рдмрд╕ рдЕрдкрдиреА рдЕрд╕рдлрд▓ рдкрд░реАрдХреНрд╖рд╛ рдХреЛ рдЗрд╕ рдореЗрдВ рдмрджрд▓рдирд╛ рд╣реИ:
рдЖрдкрдХреЛ рдХрд╛рдордпрд╛рдмреА рдорд┐рд▓реЗред