μ΄ μ€ λν«μ Sinon 2.0.0μμλ μ μλνμ§λ§ Sinon 4.2.2μμλ μ€ν¨ν©λλ€.
it('returns correct thisValue', function() {
window.SomeClass = function() {
this.counter = 0;
this.inc = function() {
this.counter++;
};
this.getCounter = function() {
return this.counter;
};
};
var spy = sinon.spy(window, 'SomeClass');
var some = new window.SomeClass();
some.inc();
expect(spy.thisValues[0].counter).toEqual(1);
expect(spy.thisValues[0].getCounter()).toEqual(1);
some.inc();
expect(spy.thisValues[0].counter).toEqual(2);
expect(spy.thisValues[0].getCounter()).toEqual(2);
});
thisValues[0]
κ°μ²΄κ° νλ‘μμ΄κ³ some
μ μ€μ μΈμ€ν΄μ€λ₯Ό μ°Έμ‘°νμ§ μλ κ² κ°μ΅λλ€.
μ΄κ²μ Sinon 4.2.2μ μ€λ₯μ λλ€.
Expected undefined to equal 1
TypeError: undefined is not a function (evaluating 'spy.thisValues[0].getCounter()')
μ΄κ²μ git bisect
λ₯Ό μ¬μ©νμ¬ λμμ΄ λ³κ²½λμκΈ°λ₯Ό μ€μ νλ λ° μ ν©νλ©°, λ³κ²½μ΄ μλμ (κΈ°λ₯)μΈμ§ μλμ§ (λ²κ·Έ)μ λν λ¨μλ₯Ό μ 곡 ν μ μμ΅λλ€.
μ 곡λ @ PVince81 μμ λ₯Ό git bisect run
μ¬μ©ν μμλ μμ ν
μ€νΈ μ€ν¬λ¦½νΈλ‘ λ°κΎΈλ κ²μ 그리 μ΄λ ΅μ§ μμ΅λλ€.
git bisect
μ¬μ© λ°©λ²μ λͺ¨λ₯Έλ€λ©΄ λ 벨 μ
μ ν μμλ μ’μ κΈ°νμ
λλ€!
http://www.marclittlemore.com/how-to-find-bugs-using-git-bisect-with-this-easy-guide/
μ€, λλ μ΄λ±λΆνλ κ²μ μ’μν©λλ€! λ΄κ° μμμ ν κ² ..
911c498dc14dc4034ba019526bf58f8b24d77da0 μ€νμ΄λ new
(# 1626)λ‘ ν΅νλ₯Ό ν΅κ³Όν©λλ€.
ν΄μ£Όμ μ κ°μ¬ν©λλ€, @ PVince81! μμ μ¬νμ μμ±μ κ°μλ₯Ό μ§μνκΈ° μν΄ νμν λ³κ²½ μ¬νμ λ€λ£¨κΈ° λλ¬Έμ # 1265λ₯Ό κ²μ¬ ν μλ μμ΅λλ€.
new
λ‘ κ°μ²΄κ° μμ±λμ§ μμΌλ©΄ μ΄ λ©μλ κ° νΈμΆλμ΄ thisValue
μ λ΄μ©μ λ³κ²½νκ³ thisValues
νμ₯ν©λλ€. λ°λλ‘ newκ° μ¬μ©λ λ νΈμΆλλ λ©μλλ thisValue
κ·Έλλ‘ λ‘λλ€.
μ°λ¦¬ μ½λκ° μ΄κ²μ λ¨μΌ μ©λλ§μ κ°μ§κ³ μλ€λ μ μ κ³ λ €νλ©΄, λλ sinonμ λ΄λΆλ₯Ό λλ¬ μ μκ°μ΄μκ³ μκ²©μ΄ μλ€κ³ λλΌκΈ° λλ¬Έμ λΉ λ₯Έ κ²½λ‘λ‘ κ°μ μ΄κ²μ μ λ° ν μ°λ¦¬μ λ¨μΌ ν μ€νΈλ₯Ό λ³κ²½νκ³ μΆμ κ²μ λλ€. μ μ¬μ μΌλ‘ νκΈ°μ μΈ λ³κ²½
λ§μ μ¬λλ€μ΄μ΄ λ¬Έμ μ λν΄ λΆννμ§ μλ κ² κ°κΈ° λλ¬Έμ, μλ§λ μ¬λλ€μ μΌλ°μ μΌλ‘ μ΄λ° λ°©μμΌλ‘ ν μ€νΈνμ§ μκ³ μμ ν κ°μΉκ° μμ κ²μ λλ€ (λ¨μ§ κ΄μ°°, κ²°μ μ μ μ§ κ΄λ¦¬μκΉμ§).
μΌλ°μ μΌλ‘ μ¬μ©λμ§ μκ±°λ μ μ΄λ μΌλ°μ μΌλ‘λ³΄κ³ λμ§ μλ κ²½μ°μλμ΄ νκ·λ₯Ό μμ νκ³ μΆμ΅λλ€.
κ°μ λ¬Έμ κ° λ°μνμ΅λλ€.μ΄ λ¬Έμ λ₯Ό ν΄κ²°ν κ³νμ΄ μμ΅λκΉ?
@ ivan-zakharchuk μ무λ μμνμ§ μμΌλ©΄ κ³νμ΄ μμ΅λλ€. λΉμ μ΄ κ·Έκ²μ κ³ μΉκ³ μΆλ€λ©΄, μ·¨ν μμλ μμ°μ€λ¬μ΄ λ€μ λ¨κ³κ° μμ΅λλ€ ;-)
μ΄κ²μ λ¬Έμ κ°λλ 컀λ°μ λλ€ : https://github.com/sinonjs/sinon/issues/1683#issuecomment -364794930
κ°λ¨ν λ§ν΄μ, λλ μ΄κ²μ λν μμ μ μν΄ μ€λ μκ°μ 보λμ§ λ§ μ±κ³΅νμ§ λͺ»νμ΅λλ€. this
κ°μΉμ μ
λͺ½μ
λλ€. ν΅μ¬ λ¬Έμ λ μ¬κΈ°μ μ 곡λ ν¨μλ₯Ό new
νλ©΄ λ³Έμ§μ μΌλ‘ μλ‘μ΄ this
μμ±νλ λ°λ©΄ thisValues[0]
(μλ κ²μλ¬Όμμ μ¬μ©λ¨)λ this
μ°Έμ‘°νλ€λ κ²μ
λλ€ new
μ μν΄ μμ± λ this
(μ : var some = new window.SomeClass();
)-λ§€μ° νΌλ μ€λ½μ΅λλ€.
λ³Έμ§μ μΌλ‘, μ΄κ²μ κ³ μΉλ κ²μ λ κ°μ§ λ°©λ²μ μλνλ κ²μ μλ―Έν©λλ€- new
νΈμΆ this
λ₯Ό μλ―Ένμ§λ§ μ°λ¦¬λ λ λ² νΈμΆν΄μΌν©λλ€ (μ¦, OPμ ν
μ€νΈμμ νλ, proxy-invoke.js
μμ νλ) this
esλ‘ λλ κ²μ
λλ€. λ΄κ° μκ°ν μμλ μ μΌν κ²μ νλμ this
μμ λ€λ₯Έ κΈ°λ₯μΌλ‘ ν¨μλ₯Ό λ°μΈλ©νλ κ²μ΄μμ§λ§, μ΄κ²μλ λ무 μλ§μ΄μκ³ λ€λ₯Έ λͺ κ°μ§λ₯Ό λ§μ³€μ΅λλ€.
μμ λ΄μ©μ΄ μ΄ν΄λκΈ°λ₯Ό λ°λλλ€. μΈμ λ μ§ μμ / μ€λͺ
μ μμ²νμΈμ. new
ν€μλκ° μ€μ λ‘ μννλ μμ
μ λν 볡μ΅μ λ³΄λ €λ©΄ μ¬κΈ° λ₯Ό μ°Έμ‘° this
λ§λλλ€.
μ΄μ¨λ λ΄κ° μμ μ°¨λ¦° ν κ°μ§λ 911c498 (νκ·λ₯Ό λμ
ν 컀λ°)μ ES6 ν΄λμ€μμ new
λ₯Ό μ¬μ©ν΄μΌνλ λ¬Έμ λ₯Ό λ€λ£¨λ ν
μ€νΈκ° ν¬ν¨λμ΄ μμ§ μλ€λ κ²μ
λλ€. μ΄λ μλ§λ ν
μ€νΈμ linting μ΅μ
μ΄ ES5λ§μ μ§μνκΈ° λλ¬Έμ class
ν€μλλ₯Ό νμ©νμ§ μκΈ° λλ¬ΈμΌ κ²μ
λλ€. νμ¬ λ¬Έμ μ λν ν₯ν μμ μ¬νμ΄ 911c498μ μμ μ¬νμ ν΄μ νμ§ μλλ‘ ν
μ€νΈλ₯Ό μΆκ°νμ΅λλ€. κ΄μ¬μ΄ μμΌλ©΄ ν보 ν μ μμ΅λλ€.
κ°μ₯ μ μ©ν λκΈ
μΌλ°μ μΌλ‘ μ¬μ©λμ§ μκ±°λ μ μ΄λ μΌλ°μ μΌλ‘λ³΄κ³ λμ§ μλ κ²½μ°μλμ΄ νκ·λ₯Ό μμ νκ³ μΆμ΅λλ€.