μλ νμΈμ μ¬λ¬λΆ,
μ λ karma-sinon
νκ³ μμΌλ©° νμ κΈ°λ³Έμ μΌλ‘ Sinonμ μ΅μ λ²μ μ μ€μΉν©λλ€. λ²μ 1.17.4κ° λλ₯Ό μν΄ μ΄κ²μ κΉ¨λ¨λ¦° κ² κ°μ΅λλ€.
this.server.requests[0].respond(500, { 'Content-Type' : 'application/json' }, JSON.stringify({}));
λ΄ Ajax νΈμΆμμ μ€λ₯ μ²λ¦¬κΈ°λ₯Ό νΈμΆνμ§ μμ΅λλ€. μ΄λ€ μ΄μ λ‘ λ¬Έμ λ₯Ό λλ²κΉ νλ λ° λμμ΄λλ Githubμμμ΄ λ²μ μ νκ·Έλ₯Ό μ°Ύμ μλ μμ΅λλ€. ν΄κ²° λ°©λ²μΌλ‘ 1.17.3μΌλ‘ λ€μ΄ κ·Έλ μ΄λνκ³ μμ μ μν΄ λ΄ νλ‘μ νΈμμ μμΆ ν¬μ₯μ μ€ννμ΅λλ€.
λ¬΄μ¨ μΌμ΄ μΌμ΄λκΈ°λ₯Ό κΈ°λ νμ΅λκΉ?
νΈλ¦¬κ±° λ Ajax μ€λ₯.
μ€μ λ‘ μΌμ΄λλ μΌ
Ajax μ€λ₯ μ²λ¦¬κΈ°λ₯Ό νΈλ¦¬κ±°νμ§ μμ΅λλ€.
μ¬μμ° λ°©λ²
this.server = sinon.fakeServer.create();
this.server.requests[0].respond(500, { 'Content-Type' : 'application/json' }, JSON.stringify({}));
λλ μ΄κ²μ΄ 1.17.4μμ λ°μνμ§λ§ 1.17.3μμλ λ°μνμ§ μμμ νμΈν μ μμ΅λλ€. λλ karma-sinonκ³Ό λΉμ·ν μ€μ μ κ°μ§κ³ μμ΅λλ€.
λ΄ μκ° μ λ¬Έμ λμ΄ μ»€λ° https://github.com/sinonjs/sinon/commit/2cfbacd5cea5b63c014076d3a65b6642b2200793
1.17.4
νκ·Έκ° npm λ μ§μ€νΈλ¦¬λ‘ νΈμλμμ§λ§μ΄ μ μ₯μμμμ΄ νκ·Έμ νμ μ μ°Ύμ§ λͺ»νμ΅λλ€. μ΄λ»κ² λ κ±°μμ?
λ΄ μκ° μ νκ·Έκ° μμ§ μμ±λμ§ μμ κ² κ°μ΅λλ€. 3 μκ° μ μ λ§ μΆμλμμ΅λλ€.
@mbarlock μ, μλ§λ β κ·ΈλΌμλ λΆκ΅¬νκ³ GitHubμ νκ·Έκ° λ¨Όμ 릴리μ€λλ©΄ λ λμ κ²μ΄λΌκ³ μκ°ν©λλ€. μ μ΄λ μ°λ¦¬λ PRμ΄λ μμ ν΄μΌ ν κ²μ μ΄ν΄λ³΄κ³ λμμ μ€ κ²μ λλ€.
λ΄ μλͺ»μ΄μΌ. git push --tags
μμ΄ λ²λ Έμ΅λλ€. λ²κ·Έμ λν μ 보μ κ°μ¬λ립λλ€.
2cfbacd 컀λ°μ νμΈνλλ° mozilla / loop # 400μμ ν μ€νΈκ° μ€ν¨νκ²λμμ΅λλ€.
# 1031μ ν¨μΉλ₯Ό λ‘컬μ μ μ©νκ³ ν μ€νΈλ₯Ό μμ νμ΅λλ€.
1.17.4κ° κΈ°μ‘΄ λμμ λ³κ²½νλ€λ©΄ μλ‘μ΄ μ£Όμ 릴리μ€μ μΌλΆκ° μλμ΄μΌν©λκΉ? νμ¬λ 1.17.3κ³Ό νΈνλλ κ²μΌλ‘ κ°μ£Όλλ―λ‘ sinon μ’ μμ±μ "^ 1.17.3"μΌλ‘ μ§μ νλ package.jsonμ 1.17.4λ₯Ό μ»κ³ μλνλ ν μ€νΈμ μ€ν¨ ν μ μμ΅λλ€.
1.17.3μ΄ μλνλ λ°©μμ νκ·μ λλ€. λλ₯Ό λ°λ‘ μ‘μΌμμμ€. κ·Έλ΄ κ²½μ°μλ κ³ μ³μΌνλ©° κ³ μ₯λ μνλ‘ μ μ§ν΄μλ μλ©λλ€.
μ λ°μ΄νΈ : μ΄κ²μ μ€μ λ²κ·Έμ²λΌ 보μ λλ€.
μ€, https://github.com/sinonjs/sinon/pull/861 @fearphage μμ μλ ν λ‘ μ
κ·Έ μ μ κ°μν λ, λ΄ μͺ½μμν΄μΌ ν μ¬λ°λ₯Έ μΌμ xhr.onerror λμ xhr.onabortμ μμ‘΄νλλ‘ ν μ€νΈλ₯Ό λ³κ²½νλ κ² κ°μ΅λλ€. λ‘컬μμ μ€νλλ λ¨μ ν μ€νΈκ° node_modules λλ ν°λ¦¬μμλ κ²½μ° λͺ¨λ μ’ μμ±μ μλμΌλ‘ λ€μ λ€μ΄λ‘λνμ§ μκΈ° λλ¬Έμμ΄ λ³κ²½ μ¬νμ΄ μ μ λμ νΌλμ μΌκΈ° ν κ²μ΄λΌκ³ μκ°ν©λλ€. package.json (Travis CIκ° ν μ€νΈλ₯Ό μν΄ μ²μλΆν° npmμ μ€μΉνκΈ° λλ¬Έμ λΉ λ₯΄κ² κΉ¨λ¬μμ΅λλ€).
μ¬λ°λ₯Έ νλ λ°©μΉ¨μ΄ λ¬΄μμΈμ§ λͺ¨λ₯΄κ² μ΅λλ€. "onerror"μ μμ‘΄νλ μΌλΆ ν μ€νΈκ° "onabort"λ₯Ό μ¬μ©ν΄μΌνλ€κ³ μ§μ νλ 1.17.4μ λ³κ²½ λ‘κ·Έμ λ©λͺ¨λ₯Ό μΆκ° ν μ μμ΅λκΉ? (btw,μ΄ μ£Όμμμ http://sinonjs.org/Changelog.txtμλ μμ§ 1.17.4κ° ν¬ν¨λμ΄ μμ§ μμ΅λλ€).
λλ κ·Έκ²μ λ μ°Ύλλ€. λ΄ ν μ€νΈ μμ μ μ‘°μ¬ν κ²°κ³Ό https://github.com/sinonjs/sinon/commit/2cfbacd5cea5b63c014076d3a65b6642b2200793μ μλ‘μ΄ λ²κ·Έκ° λμ λμμμ κΉ¨λ¬μμ΅λλ€. onReadyStateChange ν¨μλ μ΄μ μ μ λ κ²½μ° onerrorλ₯Ό μ§μ νΈμΆνκΈ° μν΄ μ€λ¨ ν¨μμ μμ‘΄νλ λμ "μ€λ₯"ProgressEventλ₯Ό νΈλ¦¬κ±°ν©λλ€. λ¬Έμ λ FakeXMLHttpRequestμ νμ¬ "μ€λ₯"μ΄λ²€νΈμ λν 리μ€λκ° μλ€λ κ²μ λλ€.
λλ½ λ μ€λ₯ eventListener ν€λ₯Ό μΆκ°νκΈ° μν΄ PR https://github.com/sinonjs/sinon/pull/1042 λ₯Ό λ§λ€μμ΅λλ€. μ΄ λ³κ²½ μ¬νμ΄ μμΌλ©΄ ν©λ²μ μΈ μλ² μ€λ₯ μλ΅ (μ : 500)μμ νΈμΆλλ onerror νΈλ€λ¬ ν¨μλ₯Ό νμΈνλ λͺ¨λ λ¨μ ν μ€νΈκ° μ€ν¨ν©λλ€. λΉμ μ μκ°μ μλ €μ£ΌμΈμ, @fearphage @ fatso83
μ΄ μ€λ λλ₯Ό μ²μ μ½μμ λ https://github.com/sinonjs/sinon/pull/1041μ λ³΄μ§ λͺ»νμ΅λλ€. λλ½ λ eventListener ν€μ μ΄λ²€νΈ μμλ₯Ό μ£Όμ₯νλ μΆκ° μ½λλ₯Ό μΆκ°ν©λλ€. λμ λ΄ PRμ 무μν΄λλ©λλ€.
μ΄μ # 1041 (# 1042μ λμΌ)μ΄ λ³ν©λμμ΅λλ€.
@overcaffeinated μ λ°μ΄νΈλ₯Ό λ°©ν΄ ν λ¬Έμμ λΉλ μ€ν¬λ¦½νΈ μ€ν¨λ‘ μΈν λλ½ λ λ³κ²½ λ‘κ·Έμ κ΄λ ¨νμ¬ (https://github.com/sinonjs/sinon/issues/991#issuecomment-216651347 μ°Έμ‘°). λ―Έμν©λλ€. λ€μ μλνκ²νκ³ λ³κ²½ μ¬νμ λν λ©λͺ¨λ₯Ό μΆκ° ν μ μκΈ°λ₯Ό λ°λλλ€.
μ΄μ κ°μ κ²λ€λ‘ μΈν΄ 2.0μ μΆμνμ¬ 1.x λΈλμΉμ λ무 λ§μ μλμ§λ₯Ό ν¬μνμ§ μλλ‘ν©λλ€.
1.7.4λ‘ μΈν΄ μ¬λ¬ ν μ€νΈκ° μ€ν¨νμ΅λλ€. 1.7.5κ°μ΄ λ¬Έμ λ₯Ό ν΄κ²°ν κ²μΌλ‘ μμν©λκΉ?
λΆννλ # 1031μ μμ§ μμ λμ§ μμκΈ° λλ¬Έμ λͺ¨λ μ¬λμ μν΄ μμ λμ§λ μμ΅λλ€. μ€λ μ λ μ λμμ λλ¦¬κ² μ΅λλ€.
μ 보 μ£Όμ μ κ°μ¬ν©λλ€, @ Standard8 !
XHR μ¬μμ λν ν΄μμ κΈ°λ°μΌλ‘μ΄ λ¬Έμ λ₯Ό μμ νμ΅λλ€ (κ³ μ₯?). μ΄λ²μλ μ³μμ§ νμΈνκΈ° μν΄ μ΄κ²μ λΉκ΅ν λΈλΌμ°μ ꡬνμ΄ μλ€λ©΄ μ’μ κ²μ λλ€. μ΄λ²€νΈκ° μ¬λ°λ₯Έ μμλ‘ μ€νλκ³ μ¬λ°λ₯Έ μ΄λ²€νΈκ° μ€νλλμ§ νμΈνκΈ° μν΄ sinonμ κ°μ§ xhr ꡬνμ μ€μ μ λΉκ΅νλ ν μ€νΈ λ² λκ° νμν©λλ€.
μμ·¨μΈμ΄ μμ΅λκΉ?
@fearphage κ·Έλ° ν μ€νΈ λ² λκ° μ΄λ»κ²
λλ κ·Έκ²μ΄ browserscope.orgμ κ°κ±°λ μ μ΄λ κ²°κ³Όλ₯Ό μ μ₯νλ λ°±μλλ‘ μ¬μ©ν μ μλ€κ³ μκ°ν©λλ€.
XHRμ λν΄ http://www.acidtests.org/ λ₯Ό μμν΄λ³΄μμμ€
λ€μμ λμμ΄λλ λͺ κ°μ§ μμ² κΈ°λ° μ νΈλ¦¬ν°μ λλ€.
νλ₯ν μμ μΈ κ² κ°μ΅λλ€! Browserscopeκ° λ€μ΄λμμ΅λλ€.
@fearphage www.browserscope.orgμ 무μΈκ°λ₯Ό λ£λ λ°©λ²μ μμλΌ μκ°μ΄ μμκΈ° λλ¬Έμ λμ μΉ νμ΄μ§λ₯Ό μμ±νμ΅λλ€.
http://people.mozilla.org/~mbanner2/sinonXHRBrowserTest.html
μ΅μ λ²μ μ Firefox, Chrome, IE λ° Safariμμλ‘λλ©λλ€.
@ Standard8 κ°μ¬ν©λλ€. λλ μ΄κ²μ μ¬μ©νμ¬ sinonμ κ°μ§ μλ² κ΅¬νμ λΉκ΅νμ΅λλ€. κ°μ¬ν©λλ€.
@fearphage @ fatso83 ,μ΄ λ¬Έμ μ νμ¬ μνμ λν κ°μλ₯Ό μ κ³΅ν΄ μ£Όμκ² μ΅λκΉ?
λΉ λ₯Έ νμ΄λ³΄κΈ°μμ μ°λ¦¬λ v1.17.3 κΈ°λ₯μ λλλ¦¬κ³ v1.17.5 릴리μ€λ₯Ό μ 곡νλ κ²μ κ³ λ €ν΄μΌνλ κ²μ²λΌ λ€λ¦½λλ€. μ΄μ κΈ°λ₯μ΄ μμ λμλλΌλ μ΄λ APIμ μ£Όμ λ³κ²½ μ¬νμ΄λ―λ‘ 2.0 릴리μ€λ‘ λ‘€λ§ν΄μΌν©λκΉ?
@fearphage κ° μ΄κ²μ λν μΈλΆ μ¬νμ λ λ§μ΄ μμ§λ§ μ μμ½νλ€κ³ μκ°ν©λλ€. λλ v1.17 λΈλμΉμμλ κ²κ³Ό master
μμλ κ²μ λ΄ λ¨Έλ¦Ώμμ λΆμ‘ μΌλ €κ³ κ³μν΄μ μλ λΉνλ€. λλ λλΆλΆμ λ¬Έμ κ° master
μμ μμ λμλ€κ³ μκ°νμ§λ§ v1.17 λΈλμΉ (# 1031 λ° # 1041 AFAIKμ κ°μ μμ μ¬νμ΄ μμ)μλ μ μ©λμ§ μλλ€κ³ μκ°ν©λλ€. λλ (μλ§λ) μ°©κ° ν μ μμ΅λλ€.
κ°μ₯ μ€μ©μ μΈ ν΄κ²°μ± μ λΉμ μ΄ λ§νλλ‘νλ κ²μ λλ€.
master
μ λ³κ²½ μ¬νμ μ μ§νκ³ λ§μ΄κ·Έλ μ΄μ
κ°μ΄λμ λ³κ²½λ μ¬νμ λ¬Έμννμμμ€ (# 1090 μ°Έμ‘°).λλ μ¬κΈ°μ λ¬΄μ¨ μΌμ΄ μΌμ΄λκ³ μλμ§ λ°λΌ μ‘κ³ μμ΅λλ€. λλλ¦¬κΈ°λ³΄λ€ μμ νλ κ²μ΄ λ λ«μ΅λκΉ?
κ°μ₯ ν° λ³νλ error
/ onerror
μ
λλ€. κ·Έλ μ£ ?
@fearphage μ°¨μμ κ°μ¬λ립λλ€! μλκ° λ리기 λλ¬Έμ λͺ¨λ μμ μ¬νμ΄ v1.17 λΈλμΉμ μ μ©λμμ λ κΈ°μ‘΄ μ΅μ’ μ¬μ©μμ κ΄μ μμ μ΄λ€ API λ³κ²½ μ¬νμ΄ λΆλͺ ν΄ μ§μ§ 5 μ€λ‘ μμ½ ν΄ μ£Όμκ² μ΅λκΉ?
μλ‘μ΄ λ©μ΄μ λ²μ μμλ ν° λ³κ²½μ΄ κ°λ₯νμ§λ§, 1.xμμ λ§μ ν
μ€νΈλ₯Ό μ€λ¨νκΈ° μμνλ λͺ¨λ κ²μ μλ§λ 보λ₯ μν μ¬μΌνμ§λ§ master
μ μ©λ μμ μ¬νμ΄ μλμ§ νμ€νμ§ μμμ΅λλ€
λ΄κ° μ΄ν΄νλ ν, 200 κ°κ° μλ μμ²μ μ¬μ ν error
μ΄λ²€νΈλ₯Ό νΈλ¦¬κ±°ν΄μΌνλ€λ μ λ§ κΉ¨μ‘μ΅λλ€. μ΄κ²μ λ μμ΅λκΉ? λλ κ·Έκ²μ΄ νμν λͺ¨λ κ²μ΄ λ§μ€ν°μ μμ μ΄λΌκ³ λ―Ώμ΅λλ€.
Githubμ NPMμμλ v1.7.4
λ₯Ό κ°μ Έ μ€λ κ²λ μ’μ μκ° μΈ κ² κ°μ΅λλ€. λλΆλΆμ μ¬λλ€μ λλ 리거λ μ
κ·Έλ μ΄λ ν μ μμ΅λλ€.
κ·Έκ² λ€ λ°λμλ€λ©΄ master
ν¬ν¨ λ μμ μ¬νμ ν¬ν¨νκ³ μ΅λν 빨리 1.17.5 릴리μ€λ₯Ό μΆμνλ κ²μ΄ μ’μ΅λλ€. ν μ μκ² μ΄? ν΄κ°λ₯Ό μν΄ λ λ©λλ€ ( Date.now()
).
NPM λ²μ μ μ κ±°νλ κ²μ "μ’μ"κ²μΌλ‘ κ°μ£Όλμ§ μμΌλ―λ‘ 1.17.4μ λν΄ npm deprecate
λͺ
λ Ήμ μ€ννμ΅λλ€. μΌλΆ μ¬λλ€μ΄ νκ·Έλ₯Ό μ¬μ©νλ κ²½μ° νκ·Έλ₯Ό μ κ±°νλ κ²λ νμ€νμ§ μμ΅λλ€. κ·Έλ¬λ κ·Έκ²μ λ λ€λ₯Έ λ
Όμμ΄λ©°, μμ μ¬νμ μ 곡νλ λ° μ§μ€ν κ²μ μ μν©λλ€.
κ³ν κ°μ μ리. μ΄λ² μ£Όλ§μ κ° μμμ κ² κ°μμ.
λκ΅°κ° # 1102μ 무κ²λ₯Όλκ³ μΆλ€λ©΄μ΄ λ¬Έμ μ λν ν΄κ²°μ± μ μ μνμ΅λλ€.
λκ΅°κ° κ·Έκ²μ νμλ‘νλ€λ©΄, λλ @ Standard8 μ ν μ€νΈ νμΌμ μ½κ° μμ νκ³ μ΄κ²μ΄ λ΄κ° κ°μ§ xhrμ λΈλΌμ°μ λμμ λ κ°κΉκ² λ§λ€κΈ° μν΄ μ¬μ©νλ κ²μ λλ€.
https://dl.dropboxusercontent.com/u/2400/tc/sinon/xhr-browser-test.htm
@ Standard8 λ€μ κ°μ¬ν©λλ€! :λ°μ:
μ¬μμ λ°λ₯΄λ©΄ onerror μ΄λ²€νΈλ DNS μκ° μ΄κ³Ό λλ μλ΅νμ§ μλ μλ²μ κ°μ λ€νΈμν¬ μμ€ μ΄λ²€νΈκ° λ°μν λλ§ νΈλ¦¬κ±°λ©λλ€. 500 λλ 404λ μ μμ μΈ HTTP μλ΅μ΄λ©° μ€λ₯κ° λ°μνλμ§ μ¬λΆλ₯Ό κ²°μ νλ κ²μ μ ν리μΌμ΄μ
μ λ¬λ € μμ΅λλ€. https://www.w3.org/TR/XMLHttpRequest/#event -xhr-error
μ¬μμ΄ νμμ²λΌ λ무 κ°κ²°ν©λλ€. 2xxκ° μλ μλ΅μ jQueryμ μν΄ μ€λ₯λ‘ κ°μ£Όλλ―λ‘ λ§μ μ¬λλ€μ΄ XMLHttpRequestμ λμμ νΌλμ€λ¬μν©λλ€.
@ nyk0r : Phredμ μμ μ΄νλ μΌμ λλ€. :)
@gil :μ΄ λ¬Έμ λ # 1102, # 1108, # 1109μμ @fearphage μ νλ₯ν μμ μΌλ‘ μμ λμ΄μΌν©λλ€. ν μ€νΈ μΌμ΄μ€κ° λΆμμ νλ―λ‘ (νμΈ / νμΈ μμ) νμ¬ v1.17 λΈλμΉμ μ½λμ μν΄ μ€μ λ‘ μμ λμλμ§ νμΈ νμκ² μ΅λκΉ? κ·Έλ κ²νμλ©΄ μ΅λν 빨리 μ ν¨μΉ 릴리μ€λ₯Ό λ°°μ‘ ν μ μμ΅λλ€.
λλ @wlepinski λλ @mbarlock μ΄ v1.17
λΈλμΉμμ μμ λμλμ§ νμΈν μ μμ΅λκΉ? λ¨μ§μμ sinon μμ‘΄μ± λ³κ²½ package.json
μ½μ΄ : sinon#v1.17
GitHubμμμ μ§μ κΆλ¦¬ λΆκΈ°λ₯Ό μ¬μ© ν μ μμ΅λλ€.
μ’μ΅λλ€. λ€μ ν μ€νΈλ₯Ό μ€ννμ¬ μμ λμλμ§ νμΈνμ΅λλ€.
"call load handler on non-2xx statuses" : function(){
var stub = sinon.stub();
this.xhr.addEventListener("load", stub);
this.xhr.open("GET", "/");
this.xhr.send();
this.xhr.respond(500, { 'Content-Type' : 'application/json' }, JSON.stringify({}));
assert(stub.called);
}
μ΄κ²μ 1.17.4μμλ μλνμ§ μμμ§λ§ μ΅μ μμ μμλ μλν©λλ€.
@fearphageλ μ΄λ―Έ bf709a7f (1797 ν)μμμ΄ ν μ€νΈλ₯Ό λ€λ£¨μμ§λ§ ν€μ΄ ...
μμ λλλ‘ λ«νλλ€.
μνκΉκ²λ λ μ΄μ ν μ€νΈ ν νλ‘μ νΈμ μ‘μΈμ€ ν μ μμ΅λλ€. μ§κΈμ μλ‘μ΄ νμ¬μμ μΌνκ³ μμ΅λλ€. νμ§λ§ λΌμ΄λΈλ¬λ¦¬λ₯Ό μ λ°μ΄νΈνλ €λ κ²½μ° μλ € λλ¦¬κ² μ΅λλ€. κ³ μ³ μ£Όμ μ κ°μ¬ν©λλ€ !!
κ°μ₯ μ μ©ν λκΈ
κ³ν κ°μ μ리. μ΄λ² μ£Όλ§μ κ° μμμ κ² κ°μμ.