Sinon: createStubInstanceλŠ” μžμ‹ μ˜ μ†μ„±μ΄λ‚˜ μƒμ†λœ 것을 μŠ€ν…ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

에 λ§Œλ“  2021λ…„ 01μ›” 23일  Β·  3μ½”λ©˜νŠΈ  Β·  좜처: sinonjs/sinon

버그 μ„€λͺ…
createStubInstance λŠ” μžμ‹ μ˜ 속성을 λ¬΄μ‹œν•˜κ³  슈퍼 ν΄λž˜μŠ€μ—μ„œ μƒμ†λœ λ©”μ„œλ“œμ™€ 속성을 λ¬΄μ‹œν•©λ‹ˆλ‹€.

μž¬ν˜„ν•˜κΈ° μœ„ν•΄

class SubTest {
  name;

  constructor({ name }) { this.name = name }

  something() {}
}

export default class SuperTest extends SubTest {
  description;

  constructor(...props) {
    super(props);
    this.description = props.description;
  }

  noop() {}
}
import sinon from 'sinon';
import SuperTest from './SuperTest.js';

sinon.createStubInstance(SuperTest, {
  description: 'Lorem Ipsum',
  name: 'Foobar',
  noop() {},
  something() {},
});
Error: Cannot stub description. Property does not exist!
    at …/sinon/lib/sinon/stub.js:129:19
    at Array.forEach (<anonymous>)
    at stub.createStubInstance (…/sinon/lib/sinon/stub.js:120:5)

description: 'Lorem Ipsum', 주석 처리 ν›„ :

Error: Cannot stub name. Property does not exist!
    at …/sinon/lib/sinon/stub.js:129:19
    at Array.forEach (<anonymous>)
    at stub.createStubInstance (…/sinon/lib/sinon/stub.js:120:5)

name: 'Foobar', 도 주석 μ²˜λ¦¬ν•œ ν›„ :

Error: Cannot stub something. Property does not exist!
    at …/sinon/lib/sinon/stub.js:129:19
    at Array.forEach (<anonymous>)
    at stub.createStubInstance (…/sinon/lib/sinon/stub.js:120:5)

μž¬μ •μ˜μ— noop() {} 있으면 μž‘λ™ν•©λ‹ˆλ‹€.

μ˜ˆμƒλ˜λŠ” 행동
createStubInstance λŠ” 제곡된 ν΄λž˜μŠ€μ— μ‘΄μž¬ν•˜λŠ” λͺ¨λ“ /λͺ¨λ“  ν•„λ“œλ₯Ό μŠ€ν…ν•  κ²ƒμœΌλ‘œ μ˜ˆμƒν•©λ‹ˆλ‹€.

μ»¨ν…μŠ€νŠΈ(λ‹€μŒ 정보λ₯Ό μž‘μ„±ν•˜μ‹­μ‹œμ˜€):

  • 라이브러리 버전: [email protected]
  • ν™˜κ²½:
    λ§₯OS 11.1
    λ…Έλ“œ 15.6.0
    npm 7.4
  • μ‚¬μš© 쀑인 λ‹€λ₯Έ 라이브러리:
    차이 4.2.0
    μ‹œλ…Όμ°¨μ΄ 3.5.0

νŽΈμ§‘ : μ›λž˜ μœ„μ˜ ν…ŒμŠ€νŠΈλ₯Ό μ§€λ‚˜μΉ˜κ²Œ λ‹¨μˆœν™”ν•˜κ³  super() μƒλž΅ν–ˆμ§€λ§Œ sinon의 λ™μž‘μ—λŠ” 영ν–₯을 λ―ΈμΉ˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€. μœ„μ˜ ν…ŒμŠ€νŠΈκ°€ μˆ˜μ •λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

Easy Documentation Help wanted

λͺ¨λ“  3 λŒ“κΈ€

μ˜¬λ €μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€. 여기에 λͺ‡ 가지 잘λͺ»λ˜μ—ˆκ±°λ‚˜ μ˜€ν•΄λ˜κ³  μžˆλŠ” 사항이 μžˆμŠ΅λ‹ˆλ‹€.

  • createStubInstance 에 λŒ€ν•œ 두 번째 인수 λŠ” λ¬Έμ„œν™” λ˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€.
  • λ¬Έμ„œμ—λŠ” λ‹€μŒμ΄ λͺ…μ‹œλ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.

    μ§€μ •λœ μƒμ„±μž ν•¨μˆ˜κ°€ ν˜ΈμΆœλ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

    λ”°λΌμ„œ 초기 인수λ₯Ό μ „λ‹¬ν•˜λŠ” 데 μ‚¬μš©ν•  수 μžˆλ‹€λŠ” 가정은 μž‘λ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

  • 이 λ¬Έμ„œν™”λ˜μ§€ μ•Šμ€ κΈ°λŠ₯의 κΈ°μ‘΄ κ΅¬ν˜„μ€ λ‹€μŒμ„ μˆ˜ν–‰ν•©λ‹ˆλ‹€.

    • 속성이 μŠ€ν… μΈμŠ€ν„΄μŠ€ 에 μ—†κΈ° λ•Œλ¬Έμ— μž¬μ •μ˜ν•  수 μ—†λŠ” 경우 throwλ©λ‹ˆλ‹€. 이것은 κ·€ν•˜μ˜ κ²½μš°μ— λ°œμƒν•©λ‹ˆλ‹€. μƒμ„±μžκ°€ ν˜ΈμΆœλ˜μ§€ μ•Šμ•˜μœΌλ―€λ‘œ "ꡬ성원" 속성이 μ‘΄μž¬ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

    • μ§€μ •λœ μž¬μ •μ˜κ°€ μŠ€ν…μΈ 경우 κΈ°λ³Έ μŠ€ν…μ„ μ§€μ •λœ κ²ƒμœΌλ‘œ λŒ€μ²΄ν•©λ‹ˆλ‹€(예: { something: sinon.stub() } ).

    • 그렇지 μ•ŠμœΌλ©΄ κΈ°λ³Έ μŠ€ν…μ΄ μ§€μ •λœ 속성 값을 λ°˜ν™˜ν•˜λ„λ‘ ν•©λ‹ˆλ‹€(예: { something: 42 } ).

이것은 λΆ„λͺ…νžˆ 더 λ‚˜μ€ λ¬Έμ„œκ°€ ν•„μš”ν•˜μ§€λ§Œ λ²„κ·ΈλŠ” μ•„λ‹™λ‹ˆλ‹€.


μ‚¬μš© 사둀λ₯Ό μž‘λ™μ‹œν‚€λŠ” 방법:

"class" ν”„λ‘œν† νƒ€μž…μ—μ„œ μƒˆ 객체λ₯Ό μƒμ„±ν•˜κ³  μžˆλ‹€λŠ” 점에 μœ μ˜ν•˜μ‹­μ‹œμ˜€. μƒμ„±μžκ°€ ν˜ΈμΆœλ˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— μ‹€μ œλ‘œ 클래슀의 μΈμŠ€ν„΄μŠ€λ₯Ό λ§Œλ“œλŠ” 것이 μ•„λ‹™λ‹ˆλ‹€. 기본적으둜 createStubInstance 의 λ°˜ν™˜ 값은 λͺ¨λ“  ν•¨μˆ˜κ°€ μŠ€ν…μœΌλ‘œ λŒ€μ²΄λ˜λŠ” ν΄λž˜μŠ€μ™€ λ™μΌν•œ μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ°–μŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ 이 μŠ€ν… μΈμŠ€ν„΄μŠ€μ— λŒ€ν•œ 속성이 ν•„μš”ν•œ 경우 ν• λ‹Ήν•˜λ©΄ λ©λ‹ˆλ‹€.

λΉ λ₯Έ λ‹΅λ³€ κ°μ‚¬ν•©λ‹ˆλ‹€!

"class" ν”„λ‘œν† νƒ€μž…μ—μ„œ μƒˆ 객체λ₯Ό μƒμ„±ν•˜κ³  μžˆλ‹€λŠ” 점에 μœ μ˜ν•˜μ‹­μ‹œμ˜€. μƒμ„±μžκ°€ ν˜ΈμΆœλ˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— μ‹€μ œλ‘œ 클래슀의 μΈμŠ€ν„΄μŠ€λ₯Ό λ§Œλ“œλŠ” 것이 μ•„λ‹™λ‹ˆλ‹€. 기본적으둜 createStubInstance 의 λ°˜ν™˜ 값은 λͺ¨λ“  ν•¨μˆ˜κ°€ μŠ€ν…μœΌλ‘œ λŒ€μ²΄λ˜λŠ” ν΄λž˜μŠ€μ™€ λ™μΌν•œ μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ°–μŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ 이 μŠ€ν… μΈμŠ€ν„΄μŠ€μ— λŒ€ν•œ 속성이 ν•„μš”ν•œ 경우 ν• λ‹Ήν•˜λ©΄ λ©λ‹ˆλ‹€.

createStubInstance λ‚΄μ—μ„œ μ§€μ›ν•˜λŠ” 것이 κ°€μΉ˜κ°€ μžˆμŠ΅λ‹ˆκΉŒ?

function createStubInstance (…) {
  // …
  return Object.assign(stubbedInstance, propertyValuePairs); // anything it doesn't recognise
}

@jshado1 λ¬Όλ‘  κ°€λŠ₯ν•©λ‹ˆλ‹€. 이 κΈ°λŠ₯에 관심이 μžˆμœΌμ‹œλ©΄ ν’€ λ¦¬ν€˜μŠ€νŠΈλ₯Ό λ³΄λ‚΄μ£Όμ„Έμš” πŸ™‚

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰