κ·νμκ² λ¬Έμ κ° μλ€λ κ²μ μ΄ν΄νκ³ κΈνκ² μ²λ¦¬νκ³ μμ΅λλ€. κ·Έλ¬λ κ·νμ λ¬Έμ λ₯Ό λ³΄λ€ μ μνκ² μ΄ν΄νκ³ , μμ νκ³ , ν΄κ²°ν μ μλλ‘ λͺ κ°μ§ μ 보λ₯Ό μ κ³΅ν΄ μ£ΌμκΈ° λ°λλλ€.
- μλ Ό λ²μ : 1.17.4
- νκ²½ : νμ΄μ΄νμ€
- μμ URL:
- μ¬μ© μ€μΈ λ€λ₯Έ λΌμ΄λΈλ¬λ¦¬: mocha, chai
λ¬΄μ¨ μΌμ΄ μΌμ΄λ κ²μ΄λΌκ³ μμνμ΅λκΉ?
λ΄λΆ Sinon μ€λ₯κ° μλλΌ λ΄ μμ μ μ€λ₯κ° λ³΄κ³ λ κ²μΌλ‘ μμνμ΅λλ€.
μ€μ λ‘ μΌμ΄λλ μΌ
λ΄λΆ Sinon μ€λ₯κ° νμλ©λλ€.
λ²μ λ°©λ²
μλͺ»λ νλμ μ¬ννλ λ°©λ²μ _μ½λλ‘_ μ€λͺ νμμμ€.
λλ JSbin λλ μ΄μ μ μ¬ν μ½λμ λν λ§ν¬
μλ₯Ό λ³΄λ €λ©΄ μ΄κ²μ μ°Έμ‘°νμμμ€.
sinon/lib/sinon/call.js
μμ μ΄ μ½λλ this.getStackFrames(...)[0] is undefined
μ€λ₯λ₯Ό μ 곡ν©λλ€.
if (this.stack) {
callStr += this.getStackFrames()[0].replace(/^\s*(?:at\s+|@)?/, " at ");
}
λ€μμμ:
getStackFrames: function () {
// Omit the error message and the two top stack frames in sinon itself:
return this.stack && this.stack.split("\n").slice(3);
},
... slice
κ° λΉ λ°°μ΄μ λ°ννλ κ² κ°μ΅λλ€.
λλ μ΄κ²μ΄ νΉμ μ½λ μν μμ΄ κ³μνκΈ°μ μΆ©λΆν μ μκΈ°λ₯Ό λ°λλλ€. κ°μ¬ ν΄μ!
μ΄κ²λ§μΌλ‘λ μΆ©λΆνμ§ μμ΅λλ€. Sinonμ APIλ₯Ό μ¬μ©νλ μ½λλ μ ν 보μ΄μ§ μμ΅λλ€. Sinonμ λ΄λΆλ μΈκΈνμ§λ§ μΈλΆλ μ΄λ»μ΅λκΉ? λΉμ μ 무μμ λ¬μ±νκΈ° μν΄ λ Έλ ₯νκ³ μμ΅λκΉ? λ¬μ±νλ €λ λ΄μ©, λ°©λ² λ° μλνμ§ μλ λ΄μ©μ λͺ νν νλ μ 보λ₯Ό λ μΆκ°νλ©΄ μ΄λ₯Ό λ€μ μ΄ μ μμ΅λλ€.
Macμ© Chrome 55.0.2883.95μμ Sinon 1.17.6(μ΅μ λ²μ μ http://sinonjs.org/μμ μ¬μ© κ°λ₯)μμ μ΄λ₯Ό μ¬νν μ μμ΅λλ€.
λ€μμ ν μ€νΈ μΌμ΄μ€κ° μΆμλ JSBinμ λλ€. http://jsbin.com/mufotihiwo/edit?js ,console,output
λ³Έμ§μ μΌλ‘ μ€ν
μ΄ Promise#then()
ν¬μΈνΈ νλ¦¬λ‘ μ λ¬λ λ Sinonμ 3μ€λ³΄λ€ κΈ΄ μ€ν μΆμ μ΄ μμ΄μΌ νλ€κ³ μκ°νμ§λ§ κ·Έλ μ§ μμ΅λλ€.
μμ§ μ νν μμΈμ μμλΌ κΈ°νκ° μμμ΅λλ€.
μ½λ°±μ΄ VMμ μν΄ μ§μ νΈμΆλκΈ° λλ¬Έμ΄λΌκ³ μκ°ν©λλ€. μ¦, μ€νμ μ무κ²λ μμ΅λλ€. λ°λΌμ Sinonμ΄ μ²μ μΈ μ€( spy.invoke()
μμ μμ)μ μλ₯΄λ©΄ μ무 κ²λ λ¨μ§ μμ΅λλ€. κ·Έλ¬λ©΄ getStackFrames()[0]
κ° undefined
μ΄κΈ° λλ¬Έμ getStackFrames()[0]
call.toString
String#replace()
in call.toString
κ° μ€ν¨ν©λλ€.
λλ μν μ λ΅μ΄ λ€μκ³Ό κ°μ toString()
λ°©μ΄ μ²΄ν¬λ₯Ό νλ κ²μ΄λΌκ³ μκ°ν©λλ€.
callStr += ( this.getStackFrames()[0] || 'unknown function' ).replace(/^\s*(?:at\s+|@)?/, " at ");
μ΄κ²μ Nodeμμλ μλνλ μ½κ° λ λμ λ²μ μΌ μ μμ΅λλ€.
let sinon = require('sinon');
function test() {
let stub1 = sinon.stub().returns( Promise.resolve({}) );
let stub2 = sinon.stub();
function run() {
return stub1().then( stub2 );
}
run()
.then( () => sinon.assert.calledTwice( stub2 ) )
.catch( console.log );
}
setTimeout( test, 0 );
κ°μ₯ μ μ©ν λκΈ
μ΄κ²μ Nodeμμλ μλνλ μ½κ° λ λμ λ²μ μΌ μ μμ΅λλ€.