μ¬λ¬ .withArgsλ₯Ό μ¬μ©νμ¬ sinon.stub()μ μ°κ²°νλ©΄ λ§μ§λ§ μ μΈλ§ μ€ν λ©λλ€.
var stubbedFunction = sinon.stub().withArgs(argument1).returns(value1).withArgs(argument2).returns(value2);
κ·Έλ° λ€μ λ§μ§λ§ μ μΈ(.withArgs(argument2).returns(value2))λ§ μ€μ λ‘ μ€ν λ©λλ€.
μ¬μ© κ°λ₯ν κ²½μ° withArgs
λ₯Ό μμ νκ³ μμ±λ μλ³Έ μ€ν
μ λ°νν΄μΌ ν©λλ€.
+1 μ΄λ₯Ό μν΄. κ΄λ ¨ λ©λͺ¨μμ withArgs
κ° μΌμΉνμ§ μλ μΈμμ λν μλ λ©μλλ‘μ μ λ¬μ μ νμ μΌλ‘ νμ©νκ³ μΆμ΅λλ€.
μλ₯Ό λ€μ΄, Node.js fs.readFileSync()
λ©μλλ₯Ό μ€ν
νκ³ μΆλ€λ©΄ Sinonμ΄ μλ ꡬνμ μ μ§νμ¬ require()
( readFileSync
μ¬μ©)κ° μμλμ§ μλλ‘ νκ³ , κ·Έλ¬λ λ΄ ν
μ€νΈλ₯Ό μν΄ νΉμ νμΌμ λν΄ μ€ν
λ°©λ²μ μ¬μ©νμμμ€.
μ΄μ λκΈμ μ:
beforeEach(function() {
global.fs = require('fs');
sinon.stub(fs, 'readFileSync').onlyWithArgs('my-file.txt').returns('Contents of file');
// Then require the module under test, which uses fs.readFileSync() internally
// require() uses original method with correct calling context
global.myModule = require('../src/my-module');
});
afterEach(function() {
fs.readFileSync.restore();
});
it('does something with the file', function() {
expect(myModule.loadFromFile()).toEqual('Contents of file');
});
κ²μλ¬Ό μμ @froots κ° λ¬Έμμ μ΄λκ°μ κ²μλμ΄ μμμ μ μνκ³ μΆμ΅λλ€. require
λ₯Ό ν΅ν΄ λ€λ₯Έ μ’
μμ±μ ν¬ν¨νλ νμΌμ λͺ¨μνλ λ°©λ²μ λν μ΄ μ루μ
μ μ°ΎκΈ° μ μ μ€λ«λμ κ²μνμ΅λλ€.
μ’μ μκ°. κ·Έκ²μ μ°λ¬λ³΄κ³ μΆμ΅λκΉ? http://github.com/cjohansen/sinon-web/
μ΄κ²μ Sinon 1.7.3μμ μ λλ‘ μλν©λλ€.
var s = sinon.stub();
s.withArgs(1).returns('a');
s.withArgs(2).returns('b');
s(1); // -> 'a'
s(2); // -> 'b'
s(3) // -> undefined
λλ κ·Έκ²μ΄ μ¬μ ν μ°κ²°λμ§ μκΈ° λλ¬Έμ κ·Έκ²μ΄ μλνλ μλΌκ³ μκ°νμ§ μμ΅λλ€(μλ μ€ν /λͺ¨μλ₯Ό μ¬μ©ν΄μΌ ν¨).
μ§μ€. κ·Έλ¬λ κ·Έκ²μ μΆ©λΆν μ’κ³ λ¬΄μ¨ μΌμ΄ μΌμ΄λκ³ μλμ§ λΆλͺ νν©λλ€. μ°κ²°μ ν΄μμ μ¬μ§λ₯Ό λ¨κΉλλ€.
@mantoniλ λ§μμ λμν©λλ€. μ€ν μ λͺ©μ μ μλΉμ€/쿼리μ κ³μ½ μλ΅μ λνλ΄λ κ²μ λλ€. μ΄ μ€νμΌμ΄ λ μ ννλ©λλ€.
λ¬Έμκ° μ¬κΈ°μμ κ°μ λ μ μλ€κ³ μκ°ν©λλ€.
λλ λ€μμ΄ μλνκΈ°λ₯Ό κΈ°λνμ΅λλ€.
var someObj = {
someProp: sinon.stub().withArgs("foo").returns(true)
}
λΆλͺ
ν μλν λλ‘ μλνμ§ μμμ΅λλ€. κ·Έλ¬λ λ μ€μν κ²μ μ λλ‘ μ€ν¨νμ§ μμλ€λ κ²μ
λλ€. foo
someObj.someProp
true λ₯Ό λ°ννμ§ μλ λμ , νμ true
λ₯Ό λ°ννμ΅λλ€. returns
μ μ Behavior μΈμ€ν΄μ€λ₯Ό λ°ννλ―λ‘ someObj.someProp
λ μ
λ ₯μ κ΄κ³μμ΄ true
$λ₯Ό μΆ©μ€ν λ°νν©λλ€.
μλ‘ λ€λ₯Έ μ νμ κ°μ²΄λ₯Ό λ°ννλ μ°κ²° ꡬ쑰 μ΄λ©΄μ κ·Όκ±°λ₯Ό μ΄ν΄ν©λλ€. κ·Έλ¬λ μ¬μ©μλ λ°νλ κ°μ²΄κ° 무μμΈμ§ μλͺ» μκ³ μμ΅λλ€. CallObjects λ° Behaviorsκ° λ ΈμΆνλ λ©μλκ° μ€ν μμ μ 곡νλ APIμ μΌμΉνκΈ° λλ¬Έμ μ€ν μ΄λΌκ³ κ°μ νλ μ΄μ λ₯Ό μ½κ² μ μ μμ΅λλ€.
@jasonkarnsμ λμν©λλ€. λ°©κΈ λμΌν "νΈλ©"μ λΉ μ‘μ΅λλ€. μ€ν μ μΈμ μΈλΌμΈνλ©΄ μμν μ€ν μΈμ€ν΄μ€κ° λ°νλμ§ μμ΅λλ€. κ·Έλ¬λ λͺ¨μλ₯Ό μ¬μ©ν λ μ°κ²°μ΄ μμλλ‘ μλνλ κ²μΌλ‘ 보μ λλ€.
var someObj = {
someProp: sinon.mock().withArgs("foo").returns(true)
}
μ΄μ κ° μλμ?
λ΄κ° λκ°λ₯Ό λμΉκ³ μλμ§ νμ€νμ§ μμ§λ§ @froots ν¬μΈνΈκ° μ§κΈ κ°λ₯ν©λκΉ? μ΄ μμ μ μνν΄μΌ νμ΅λλ€.
sinon.stub(fs, 'readdirSync', (dir) => {
if (dir === 'foo-path') {
return [
'my.js',
'fake.js',
'stuff.js'
];
}
return fsReaddir(dir);
});
λ€μκ³Ό κ°μ μΌμ νκ³ μΆμμ΅λλ€.
var myStub = sinon.stub(fs, 'readdirSync', fs.readdirSync);
myStub
.withArgs('foo-path')
.returns([
'my.js',
'fake.js',
'stuff.js'
]);
λλ μ΄κ²μ΄ μ§κΈ μμ λμλ€κ³ μκ°ν©λλ€. μλ μμ λ [email protected]
λ‘ μλν λλ‘ μλν©λλ€.
var Dummy = {
doSomething: function(something) {
return 'doing ...' + something;
}
}
sinon.stub(Dummy, 'doSomething')
.withArgs('sleep').returns('sleepy')
.withArgs('eat').returns('eating');
console.log(Dummy.doSomething('sleep'));
console.log(Dummy.doSomething('eat'));
@valentin-radulescu-hs μ¬μ ν 1.17.7
λ‘ μ€ν¨ν©λλ€.
withArgs
( @jasonkarns https://github.com/sinonjs/sinon/issues/176#issuecomment-μμ μ§μ ν λλ‘)μ κ΄κ³μμ΄ μ΅μ returns
λ₯Ό μ μΌν λ°ν κ°μΌλ‘ μ¬μ©ν©λλ€. 78191790).
λλ₯Ό μν΄ μλνλ κ²μ withArgs()
λ₯Ό μ°κ²°νμ§ μμμΌλ‘μ¨ @mantoni μ λ΅λ³ https://github.com/sinonjs/sinon/issues/176#issuecomment -33636496 μ
λλ€.
var s = sinon.stub();
s.withArgs(1).returns('a');
s.withArgs(2).returns('b');
@zurfyx λ Έλ λλ λΈλΌμ°μ μμ μ€ν μ€μ λκΉ? μ΄λ€ λ²μ μ λ Έλ/λΈλΌμ°μ λ₯Ό μ¬μ©νκ³ μμ΅λκΉ? κ·Έκ²μ΄ μ€μνμ§ νμ€νμ§ μμ§λ§ λλ λ΄ λμμ 볡μ λ₯Ό μλνκ³ μΆμ΅λλ€.
μλ
νμΈμ @valentin-radulescu-hsμ
λλ€. babel-cli
6.22.2λ₯Ό μ¬μ©νμ¬ λ
Έλμμ μ€ν μ€μ
λλ€.
λ¦μ λ΅λ³ μ£μ‘ν©λλ€
@zurfyx μμμ μμ±ν κ²κ³Ό λμΌν μ½λλ₯Ό μ¬μ©νμ¬ μΈκΈν ꡬμ±μΌλ‘ 볡μ λ₯Ό μλνμΌλ©° μμλλ‘ sleepy
λ° eating
μ½μμ μΆλ ₯λ©λλ€. μ κ·Έκ²μ΄ λΉμ μκ² λ¬Έμ λ₯Ό μΌμΌν€λ μ§ μ λͺ¨λ₯΄κ² μ΅λλ€ π’
@zurfyx _ μμ ν_ νμ€ν νκΈ° μν΄, μ΄κ²μ μλν΄ λ³΄μ ¨μ΅λκΉ?
grep version node_modules/sinon/package.json
rm -r node_modules
rm npm-shrinkwrap
npm install
grep version node_modules/sinon/package.json
λλΆλΆμ κ²½μ° λ¬Έμ κ° λ°μνλ κ²μ μ€μΉλ κ²κ³Ό λμΌνμ§ μμ κ²μΌλ‘ μμλλ ν¨ν€μ§ λ²μ λλ¬Έμ λλ€.
@ fatso83 κ·Έκ²λ μλνμ§ μμ΅λλ€. grep
μΆλ ₯ λ²μ μ μ¬μ ν 1.1.7.7
μ
λλ€.
μ΄κ²μ΄ λμμ΄ λ μ μλ κ²½μ°μ λλΉνμ¬ λ΄ μ 체 ν μ€νΈμ λλ€.
it('test', () => {
const s = sinon.stub();
s.withArgs('a').returns('1');
s.withArgs('b').returns('2');
console.info(s('c'));
});
s('a')
: '1'
β
s('b')
: '2'
β
s('c')
: undefined
β
it('test', () => {
const s = sinon.stub()
.withArgs('a').returns('1')
.withArgs('b').returns('2');
console.info(s('c'));
});
s('a')
: '2'
β
s('b')
: '2'
β
s('c')
: '2'
β
sinon.createStubInstanceλ μ¬μ©νμ¬ μ΄ λμμ μ¬νν μ μμ΅λλ€.
const stub = sandbox.stub();
const myObj = function(){};
const objOne = sinon.createStubInstance(myObj);
const objTwo = sinon.createStubInstance(myObj);
stub.withArgs(objOne).returns('1');
stub.withArgs(objTwo).returns('2');
console.info(stub(objOne));
console.info(stub(objTwo));
μ°μΆ:
2
2
λλ sinon.createStubInstanceκ° μλ‘μ΄ μ€ν κ°μ²΄λ₯Ό μμ±ν΄μΌ νλ€κ³ μκ°νμ΅λλ€. νλ¦° λ§μΈκ°μ?
μ΄ μ§λ¬Έμ΄ μ΄ μ€λ λμ μνλμ§ νμ€νμ§ μμ§λ§ νμ€ν κ΄λ ¨μ΄ μμ΅λλ€. sinon 1.17.7
κ° μλ νλ‘μ νΈμμ μ λ μ¬λ¬ withArgs
λ¬Έμ μ°κ²°νλ λ° μ¬μ©νμ΅λλ€. μ¬κΈ°μ λ§μ§λ§ λ¬Έμ κΈ°λ³Έκ°μΌλ‘ μ¬μ©λλ "grab-all" 맀μ²μμ΅λλ€. μλ₯Ό λ€μ΄:
const s = sinon.stub();
s.withArgs(1).returns(1)
.withArgs(2).returns(2)
.withArgs(sinon.match.any).returns('my-default-value')
s(1) // 1
s(5) // my-default-value
μ΄μ 4.1.3
λ₯Ό μ¬μ©νκ³ λμμ΄ λ³κ²½λμ΄ νμ my-default-value
λ₯Ό λ°νν©λλ€. μλν 건κ°μ? κ·Έλ λ€λ©΄ withArgs
체μΈμμ κΈ°λ³Έ/λ체 κ°μ μ μνλ λ°©λ²μ΄ μμ΅λκΉ?
λλ λ³νκ° μλλ μ μ΄ μλ€κ³ μκ°νλ€. μ λν μμ μ¬νμ μ 곡ν μ μλ κ²½μ°
νκ· μμ λ‘κ²! gotμ μ¬μ©νμ¬ λ°μν μμΉλ₯Ό μΆμ νλ λ° λμμ μ€ μ μμ΅λλ€.
ννλ€.
λ΄λ§¨. 15. 1μ 2018, 11.13 skrev David GarcΓa [email protected] :
μ΄ μ§λ¬Έμ΄ μ΄ μ€λ λμ μνλμ§ νμ€νμ§ μμ§λ§
νμ€ν κ·Έκ²κ³Ό κ΄λ ¨μ΄ μμ΅λλ€. sinon 1.17.7μ΄ μλ νλ‘μ νΈμμ I
μ¬λ¬ withArgs λ¬Έμ μ°κ²°νλ λ° μ¬μ©λ©λλ€. λ§μ§λ§ νλλ
κΈ°λ³Έκ°μΌλ‘ μλνλ "grab-all" 맀μ². μλ₯Ό λ€μ΄:const s = sinon.stub();s.withArgs(1).returns(1)
.withArgs(2).returns(2)
.withArgs(sinon.match.any).returns('λ΄ κΈ°λ³Έκ°')
s(1) // 1s(5) // λ΄ κΈ°λ³Έκ°μ΄μ 4.1.3μ μ¬μ©νκ³ λμμ΄ λ³κ²½λμμΌλ©° νμ λ°νλ©λλ€.
λ΄ κΈ°λ³Έκ°. μλν 건κ°μ? κ·Έλ λ€λ©΄ μ μνλ λ°©λ²μ΄ μμ΅λκΉ?
withArgs 체μΈμ κΈ°λ³Έ/λ체 κ°?β
λΉμ μ΄ μΈκΈλμκΈ° λλ¬Έμ μ΄κ²μ λ°λ κ²μ λλ€.
μ΄ μ΄λ©μΌμ μ§μ λ΅μ₯νκ³ GitHubμμ νμΈνμΈμ.
https://github.com/sinonjs/sinon/issues/176#issuecomment-357638653 λλ μμκ±°
μ€λ λ
https://github.com/notifications/unsubscribe-auth/AAluXMzqALJ0JlAM3hUaiK1SSyca9H74ks5tKyS4gaJpZM4AK2eu
.>
[μ΄λ―Έμ§: --]
μΉΌ μλ¦ μ½₯μ
[μ΄λ―Έμ§: https://]about.me/kopseng
https://about.me/kopseng?promo=email_sig&utm_source=email_sig&utm_medium=email_sig&utm_campaign=external_links
@fatso83 λ²μλ₯Ό μ’νλλ° μΌλΆλ¬ κ·Έλ¬λ κ² κ°μ΅λλ€. λμκ²λ λ§μ§λ§ withArgs
λ¬Έμμ λ체λ₯Ό μ§μ νλ κ²μ΄ λ μμ°μ€λ½κ² λκ»΄μ§μ§λ§ μ΄ κ²½μ°μλ μμλ₯Ό λ°κΎΈκ³ .withArgs(sinon.match.any)
λ₯Ό 첫 λ²μ§Έ μμΉμ λ£μΌλ©΄ λ¬Έμ κ° ν΄κ²°λ©λλ€.
κ°μ₯ μ μ©ν λκΈ
μ΄κ²μ Sinon 1.7.3μμ μ λλ‘ μλν©λλ€.