์์ฑ๊ธฐ ํจ์๋ก ์์
ํ ๋ ์คํ์ด์ ๋ฐํ ๊ฐ์ ํญ์ undefined
์
๋๋ค. ๋ค์์ ์คํจํ ํ
์คํธ ์ผ์ด์ค์
๋๋ค.
require('should');
var sinon = require('sinon');
var co = require('co');
var foo = {
bar: function() {
return 'bar';
},
biz: function *() {
return 'biz';
}
}
describe('Return value', function() {
it('should work with regular functions', function() {
sinon.spy(foo, 'bar');
foo.bar();
foo.bar.firstCall.returnValue.should.equal('bar');
});
it('should work with generator functions', co.wrap(function*() {
sinon.spy(foo, 'biz');
var result = yield foo.biz();
result.should.equal('biz');
foo.biz.firstCall.returnValue.should.equal('biz');
}));
});
npm install co mocha should sinon && ./node_modules/.bin/mocha --harmony index.js
๋ก ์คํํ์ญ์์ค.
Sinon์ ์์ง ES6 ๊ธฐ๋ฅ์ ์ง์ํ์ง ์์ต๋๋ค. ์ด ์์ ์ ์์ง ์์๋์ง ์์์ผ๋ฏ๋ก ์ธ์ ์๋ํ ์ง ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
@mantoni , ๋ง์ต๋๋ค. ์ด๊ฒ์ ๊ธฐ๋ฅ ์์ฒญ์ ๋ ๊ฐ๊น์ต๋๋ค. ์๋ฅผ ๋ค์ด ๋ก๋๋งต์ ์ถ๊ฐ๋ ๋ ์ฝ๊ฒ ๋ค์ ๋ง๋ค ์ ์๋๋ก ์ผ์ข ์ ํ๊ทธ("es6"?)์ ํจ๊ป ์ด์ด ๋์๊ฒ ์ต๋๊น? -ํด์ผ ํ ์ผ์ ํ๊ฐํ๋๊ฐ?
์ด๊ฒ์ ์ข์ ๊ธฐ๋ฅ์ด ๋ ๊ฒ์ ๋๋ค.
@ruimarinho ๋ด๊ฐ ์ด๊ฒ์ ์ฐพ์์ต๋๋ค https://github.com/ingameio/SinonES6.JS
require("sinon")์ require("sinon-es6")์ผ๋ก ๋ฐ๊พธ๋ฉด ํ
์คํธ๋ฅผ ํต๊ณผํ๋ ๊ฒ ๊ฐ์ต๋๋ค.
--
2017๋
6์ 22์ผ @fatso83 ์ ํธ์ง:
์ด๊ฒ์ ์ฌ์ค์ด ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ๋๋ ์ด๊ฒ์ ์๋์ผ๋ก ํ
์คํธํ๋ค. sinon-es6
_๋ง ์กฐ๋กฑ ์ ์ํ ์์ฑ๊ธฐ์ ๋ํ ์ง์์ ๊ตฌํํ๋ฏ๋ก ์์ ํ ์๋ฏธ๊ฐ ์์ต๋๋ค.
์ด ์์ ์ ํ๋ ์ฌ๋์ด ์์ต๋๊น?
@emgeee ๋ด๊ฐ ์๊ณ ์๋ ๊ฒ์ด ์๋๋๋ค.
+1 es6 ๊ธฐ๋ฅ์ด ์๋ @ruimarinho sinon.js๊ฐ ์์ผ๋ฉด ์ ๋ง ์ข์ ๊ฒ์ ๋๋ค!
@ingameio ๊ฐ ๋ณ๊ฒฝ ์ฌํญ์ผ๋ก PR์ ํ์๊ฒ ์ต๋๊น?
@fatso83 ์ ์ ๊ฐ์ฌํฉ๋๋ค!
๊ณง ํ๋ณดํ๊ฒ ์ต๋๋ค ;)
ํจํค์ง ๋ฒ์ ์ ๋ํด buster-test๋ฅผ ์คํํ ๋ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ๋๋ฒ๊น
์ ์ข ํด๋ณด์์ง๋ง ์์ฆ ์๊ฐ์ด ์์ด์ ๋ฌธ์ ๋ฅผ ํ์ง ๋ชปํ์ต๋๋ค.
๋๊ตฐ๊ฐ๊ฐ ๋ณ๊ฒฝ ์ฌํญ์ ๋ด ํฌํฌ๋ก ํธ์ํ ์ ์๋๋ก ๋๊ณ ์ถ๋ค๋ฉด ์ ์๊ฒ ๋ง์ํด ์ฃผ์ญ์์ค.
@gaguirre ๋ฐ๊ฐ์ด ์์์
๋๋ค. Maximillian์ ๋ฐฉ๊ธ ๋ชจ๋ ํ
์คํธ๋ฅผ Mocha๋ก ๋ณํํ๊ณ ํ
์คํธ ์ค์ ์ ์ฝ๊ฐ ๋ณ๊ฒฝํ์ต๋๋ค. ๋ฐ๋ผ์ master
์์ ์ต์ ๋ณ๊ฒฝ ์ฌํญ์ ๊ฐ์ ธ์ค๋ฉด ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋ ์ ์์ต๋๊น?
@gaguirre ๋๊ตฐ๊ฐ ์ด ์ค๋ ๋๋ฅผ ์ฐ์ฐํ ๋ณด๊ฒ ๋ ๊ฒฝ์ฐ๋ฅผ ๋๋นํ์ฌ ์ง๋๊ฐ๋ ์ฌ๋์ด ๋ณผ ์ ์๋๋ก ๋ณ๊ฒฝ ์ฌํญ์ ํฌํฌ๋ก ํธ์ํ๋ ๊ฒ์ด ์์ด๋์ด์ผ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
@fatso83 ์ฒซ ๋ฒ์งธ ๋ฒ์ ์ underscope/sinon ์ผ๋ก ํธ์ํ์ต๋๋ค.
์ฃผ์ ๋ฌธ์ ๋ es6(์ด ๊ฒฝ์ฐ phantomjs)์ ์ง์ํ์ง ์๋ ์์ง์ผ๋ก ํ
์คํธ๋ฅผ ์คํํ ๋ ๋ฐ์ํฉ๋๋ค. ์ฝ๋๋ฅผ ๊ตฌ๋ฌธ ๋ถ์ํ ๋ ์คํจํ๋ฏ๋ก eval()
๋ฅผ ํด๊ฒฐ ๋ฐฉ๋ฒ์ผ๋ก ์ฌ์ฉํ๊ณ ์์ต๋๋ค. ์ก๋ค. ๋๋ ์ด๊ฒ์ด ๋ฐ์๋ค์ฌ์ง ์ ์๋ค๊ณ ์๊ฐํ์ง๋ง ๊ทธ๊ฒ์ ์ถ๋ฐ์ ์ด๋ค.
์ง๊ธ์ ์์ฑ๊ธฐ ํธ์ถ์ ๋ค๋ฅธ ํ์ผ๋ก ๋ํํ์ฌ ๋์ ์ผ๋ก ์๊ตฌํ๊ณ ์์ง๋ง ์๋ํ์ง ์์ต๋๋ค. browserify๊ฐ ๋์ ์ผ๋ก ํ์ํ ํ์ผ๋ ๋ฒ๋ค๋ก ๋ฌถ๊ณ ์๊ธฐ ๋๋ฌธ์ ์๋ํ์ง ์๋ ๊ฒ ๊ฐ์ต๋๋ค. npm run test-headless
์คํํ ๋ ์ผ๋ถ ํ์ผ์ ์ ์ธํ ์ ์๋์ง ๊ถ๊ธํฉ๋๋ค.
์ด๋ค ๊ฒ์ด ์ต์ ์ ํด๊ฒฐ์ฑ ์ด ๋ ์ ์๋ค๊ณ ์๊ฐํ์ญ๋๊น?
ํผ๋๋ฐฑ์ ๋ณด๋ด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. @gaguirre . ๋ฐ๋ผ์ ๊ธฐ๋ณธ์ ์ธ ๋ฌธ์ ๋ ์์ง์ด ์ง์ํ์ง ์๋ ๊ฒฝ์ฐ ๊ตฌ๋ฌธ ๋ถ์์ ํผํ ์ ์๋ ๋ฐฉ๋ฒ์ด ํ์ํ๋ค๋ ๊ฒ์ ๋๋ค. WebWorkers ๋ฑ๊ณผ ๊ฐ์ด ๋จ์ํ ๊ธฐ๋ฅ ๊ฐ์ง๋ณด๋ค ์ฝ๊ฐ ์ด๋ ต์ต๋๋ค.
์ค์ ๊ฒ์ฌ๋ฅผ ์์ํ๋ ๊ฒ์ if(require('generator-support')){ ... }
๋งํผ ๊ฐ๋จํ์ง๋ง ์ค์ ๊ตฌ๋ฌธ ๋ถ์ ๋ฌธ์ ๋ ํด๊ฒฐ๋์ง ์์ต๋๋ค.
@mantoni ์ @mroderick, ์ด๊ฒ์ ๊น๋ํ๊ฒ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์์ด๋์ด๊ฐ ์์ต๋๊น?
์ถ์ : ์ ๋ ๋ช ์๊ฐ ํ์ ์คํ๋ผ์ธ-ํด๊ฐ๋ก ๋จ์ด์ ธ ์๊ธฐ ๋๋ฌธ์ ๋ถํ์ ์ดํ ์ผ๋ง ๋์ ๋ต๋ณ์ ์ฝ์ ์ ์์ ๊ฒ์ ๋๋ค.
์ด ์์ค์ ์์ฑ๊ธฐ ์คํฐ๋น์ด ์ค์ ๋ก ์๋ํ๋์ง(ํนํ ์ฝ๋ฃจํด ์งํฅ ์๋๋ฆฌ์ค์์) ์ ์ ์์ต๋๋ค. ๋น๋๊ธฐ ๋์์ ์ผ๋ถ ์๋ฎฌ๋ ์ด์ ์ด ์์๋๋ก ๋ ์ ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ํ์ง๋ง ๊ตฌ๋ฌธ ๋ถ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ ๋ฐฉ๋ฒ์ด ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
์ ์ :
์์ฑ๊ธฐ ์ฝ๋๋ฅผ ๋ณ๋์ ํ์ผ๋ก ์ถ์ถํ๊ณ ์์ฑ๊ธฐ ํจ์๋ฅผ ๋ํํ ๋ ์์ฒญ ์์๋ง ํด๋น ํ์ผ์ require()
ํฉ๋๋ค. ์:
?/es6-support.js:
"use strict";
exports.getGeneratorWrapper = function(method, ctx, args) {
return function* () {
return mockObject.invokeMethod(method, ctx, args);
}
}
lib/sinon/mock.js->์์...:
var wrapper = function () {
return mockObject.invokeMethod(method, this, arguments);
});
if (/^function\s*\*/.test(method.toString())) {
wrapper = require('es6-support').getGeneratorWrapper(method, this, arguments);
}
wrapMethod(this.object, method, wrapper);
(๋ํ ๋จ์ ํ ์คํธ์ ์ ์ฌํ๊ฒ ์ํํ๊ณ ์ฝ๋ ๊ฒ์ฌ ์ถ์ ์ผ๋ก ์ธํด 'es6-support' ํ์ผ์ด ์๋์ผ๋ก ํฌํจ๋์ง ์๋์ง ํ์ธํ์ญ์์ค.)
๋์ ์ ์ :
sinon 2.0์ด ์ถ์๋ ์ค๋น๊ฐ ๋์์ ๋ ES5 ํธํ์ฑ์ ์ฌ์ ํ โโ๊ฐ์น ์๋ ๋ชฉํ๊ฐ ๋ ๊ฒ์ ๋๊น? ์๋ง๋ ํธ๋์คํ์ผ๋ฌ ์ฌ์ฉ์ ์์ด ์ฌ์ ํ ๋ ๊ฑฐ์ ES5 ์ ์ฉ ํ๊ฒฝ์ ์ง์ํ๋ ์์์ ์ฌ๋๋ค์๊ฒ 1.x์์ ๋จ๊ฒจ์ง ๊ฒ์ด๋ผ๊ณ ๋งํ ๋์ผ ๊ฒ์ ๋๋ค.
@evan-king ์กฐ๊ฑด๋ถ ์๊ตฌ ์ฌํญ์ ๋ธ๋ผ์ฐ์ ๋น๋์์ ์ค๋จ๋๋ฏ๋ก ์๋ฃจ์ ์ด ์๋๋๋ค. ์กฐ๊ฑด๋ถ ์๊ตฌ๋ ์ข ์์ฑ ๊ทธ๋ํ์ ์ ์ ๋ถ์์ ๋ฌดํจํํ๋ฏ๋ก WebPack, Rollup ๋ฐ Browserify์ ๊ฐ์ ๋๊ตฌ๋ ์ด๋ฅผ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค. ์์ ํ ๋ค์ด๊ฐ๊ฑฐ๋ ์์ ํ ๋น ์ ธ ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ์, ES5 ํธํ์ฑ์ ์ค์ํฉ๋๋ค. ES6 ์์ฑ๊ธฐ ์ง์ ์ ๊ธฐ๊ปํด์ผ ์กฐ์ ํ๊ณ ์ฌ๋๋ค์ด ํ๋ก์ ํธ์ Sinon์ ์ฌ์ฉํ๊ธฐ ์ํด ์ถ๊ฐ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๋๋ก ๊ฐ์ํ๋ฉด ํ ์คํธ ์ํ์ ๊ธฐ์ค์ด ๋์์ง๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ง์ ์ฌ๋๋ค์๊ฒ ๊ทธ ๋ฌธํฑ์ ์๋ ๊ทธ๋๋ก ์ถฉ๋ถํ ๋์ต๋๋ค. ์คํฌ๋ฆฝํธ ํ๊ทธ๋ฅผ ํฌํจํ์ฌ ์๋ํ๋๋ก ํ๋ ๊ฒ์ IMHO์ ์ค์ํ ๊ธฐ๋ฅ์ ๋๋ค. ์ฐ๋ฆฌ๋ ์ธ์ ๊ฐ ES5 ํธํ์ฑ์ ๊นจ๋จ๋ฆด ์ ์์ง๋ง ๋ก๋๋งต์ ์๊ณ Sinon 3์ ๋ํด ๋ ผ์์กฐ์ฐจ ํ์ง ์์์ต๋๋ค. Sinon 2๋ ์ฌ์ค์ ๋์จ ์ง ๊ฝค ๋์์ต๋๋ค. ์ฐ๋ฆฌ๊ฐ ๊ณต์ ์ถ์๋ฅผ ํ์ง ๋ชปํ๊ฒ ๋ง๋ ์ฝ๊ฐ์ ์ฑ๊ฐ์ ์ผ์ด ์์ต๋๋ค.
๊ธฐ์กด ES5 ๋ฐํ์ ํธํ์ฑ์ ๊นจ๋จ๋ฆฌ์ง ์๊ณ ES6 ํธํ์ฑ์ ์ป๋ ๋ฐฉ๋ฒ์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ ๊ฐ์ง๊ฐ ์์ผ๋ฉฐ, ๋ง์ง๋ง ๋ฐฉ๋ฒ์ ํ์คํ์ง ์์ต๋๋ค(ํ ์คํธํ์ง ์์).
์ด๊ฒ์ ํดํน์ด์ง๋ง ์๋นํ ๊ฐ๋จํฉ๋๋ค. ์ด๊ฒ์ด ์๋ฏธํ๋ ๋ฐ๋ ์ฐ๋ฆฌ๊ฐ ํ์ํ ๋ชจ๋์ ํ๊ฐํ ์ง ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ๊ธฐ ์ํด ์ ์ ์์ฐ ์ธ๋ผ์ด๋ ๋ฐ ES6 ๊ธฐ๋ฅ ํ ์คํธ์ ์์กดํ ์ ์๋ค๋ ๊ฒ์ ๋๋ค. ์ด๊ฒ์ ES5 ํธํ์ฑ์ ๋ณด์ฅํฉ๋๋ค(Sinon์ ๋ฐํ์์ด ๊ตฌ๋ฌธ์ ์ง์ํ๋ ๊ฒฝ์ฐ์๋ง ํจ์น๋ฉ๋๋ค). ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ ์์ ์ธก์ด๋ ํด๋ผ์ด์ธํธ ์ฌ์ฉ์ ๋ชจ๋์์ Babel ํํ์ ์ถ๊ฐ ๋๊ตฌ๊ฐ ํ์ํ์ง ์์ผ๋ฉฐ ES6์ ํ ์คํธํ๋ฉด ES5 ๋ธ๋ผ์ฐ์ ๊ฐ ์ค๋จ๋ฉ๋๋ค. ์ด๋ค ๊ฒฝ์ฐ์๋ ์คํจํ์ ๊ฒ์ ๋๋ค.
brfs ์ ๊ฐ์ ๊ฒ์ด ์๋ค๊ณ ๊ฐ์ ํ๋ฉด ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ์ ๊ฒ์ ๋๋ค.
_๋ฐํ์ ๊ธฐ๋ฅ.js_
var features = {};
try {
new Function("var foo = function* foo(){ }") ;
features.generatorSupport = true;
}
catch(err){ features.generatorSupport = false; }
module.exports = features;
_es6-generator-wrapper.js_
return function* () {
return mockObject.invokeMethod(method, ctx, args);
}
_es6.js_
var features = require('./runtime-features');
if( features.generatorSupport ) {
var code = fs.readFileSync('./es6-generator-wrapper.js');
module.exports.getGeneratorWrapper = new Function("mockObject", "method", "ctx", "args", code);
} else {
module.exports.getGeneratorWrapper = function() { throw new TypeError("You tried using a generator function in a runtime only capable of running ES5 code"); }
}
์ด๊ฑด ์ ๊ฐ ์ค์ ๋ก ํด๋ณด์ง ์์์ ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. Babel์ ํตํด ๋น๋๋ฅผ ES5๋ก ๋ณํํ๋ฉด ES6 ์ฝ๋๋ฅผ ์ฌ๊ธฐ์ ๊ธฐ์ ์์ฑํ ์ ์๊ณ ์์์ ํ๋ ๊ฒ์ฒ๋ผ ์ ํ๋ฅผ ํผํ๊ณ ์์ฑ๊ธฐ์ ๋ํด ๋์ผํ ์ข
๋ฅ์ ๊ฒ์ฌ๋ฅผ ๊ณ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๊ทธ๊ฒ๋ค์ ES5 ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌํ๋ ๊ฒ์
๋๋ค. ๋ฌผ๋ก ES5 ๋ธ๋ผ์ฐ์ ์์ ES6์ ํ
์คํธํ๋ ๊ฒ์ ์ฌ์ ํ โโ์คํจํฉ๋๋ค. ์ด๊ฒ์ ํด๋ผ์ด์ธํธ ์ธก์ ์ด์ ๊ฒ๊ณผ ๋์ผํ ์ฅ์ ์ด ์์ง๋ง yield
, async
, function*()
์ ๊ฐ์ ํญ๋ชฉ์ ๋ํ ES2015 ์ง์์ด ๋๋ฌํ์ง ์์๊ธฐ ๋๋ฌธ์ ๊ธฐ์ฌ๋ฅผ ๋ฐฉํดํ ์ ์์ต๋๋ค. ๋์ ์ฒญ์ค.
+1
@rpavlovs , ์ค๋ ๋์ +1์ ์ถ๊ฐํ๋ ๊ฒ์ ์ค์ ๋ก ์๋ฏธ๊ฐ ์์ต๋๋ค. GitHub UI์๋ ๊ฐ์ ์ ํํํด์ผ ํ๋ ๊ฒฝ์ฐ ๊ฐ ๋๊ธ ์๋จ์ "๋ฐ์ ์ถ๊ฐ" ๋ฒํผ์ด ์์ต๋๋ค. +1์ ์๋ฌด ๊ฒ๋ ํ์ง ์์ต๋๋ค. ๋ฐ๋ฉด์ ์์ ์ ์ ์ค ํ๋(๋๋ ๋ ์๋ฆฌํ ๊ฒ)๋ฅผ ๊ตฌํํ๋ ํ ๋ฆฌํ์คํธ๋ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ๊ฐ๋ฅ์ฑ์ด ํจ์ฌ ๋ ๋์ต๋๋ค ๐
์ ๋๋ ์ดํฐ์ ๋ํ API ์ง์์ด ์ด๋ป๊ฒ ๋ณด์ผ์ง ์ ๋ํ ์๊ฒฌ์ ๋ฃ๊ณ ์ถ์ต๋๋ค. ์ด์ ๋ํด ๋ช ์๊ฐ์ ์ฌ์ฉํ ํ์๋ ์ฌ๋๋ค์ด ๋ฌด์์ ๋ณด๊ณ ์ถ์ดํ๋์ง ์์ง ํ์คํ์ง ์์ต๋๋ค.
์ด๋ฅผ ๊ตฌ์ฒดํํ๊ธฐ ์ํด @ingameio ์ ๋ชจ์ API ์์ ์ฌํญ์ ์ ์งํ๋ฉด์ ๋์์ ES5 ํธํ์ฑ์ ๊นจ๋จ๋ฆฌ์ง ์๋ ์ ๋ถ๊ธฐ ๋ฅผ ๋ง๋ค์์ต๋๋ค(์์์ ์ธ๊ธํ ํดํน ์ฌ์ฉ).
๋๋ฅผ ์กฐ๊ธ ์ง์ฆ๋๊ฒ ํ๋ ๊ฒ์ ํ ์คํธ ์์ ๊ฐ ์๋ํ์ง ์๊ธฐ ๋๋ฌธ์ Ingameio์์ ์๋ ๋ณ๊ฒฝ ์ฌํญ์ ํ ์คํธํ๋ ๋ฐฉ๋ฒ์ ์ ๋ง๋ก ๋งํ ์ ์๋ค๋ ๊ฒ์ ๋๋ค. ํฌํฌ์ ์์ ๋ ์์ ํ์ง ์๊ณ ์ฌ์ /ํฌ์คํธ๋ฅผ ๊นจ๋ ํญ๋ชฉ์ ์ป์ ์ ์์ต๋๋ค. ๋ณ๊ฒฝ.
๋ฐ์ ๊ธฐ๋ ๋จ์ํ ๊ฒ์
๋๋ค. ๊ณผ๊ฑฐ๋ฅผ ๊ธฐ์ตํ๋ ๋ถ๋๋ฌ์ด ๋๊ธฐ์ ์กด์ฌ์
๋๋ค. ๋ฐ๋ผ์ co
๋ฐ ๊ด๋ จ๋์ง ์์ ๋ค๋ฅธ ๊ฒ์ผ๋ก ์์ ๋ฅผ ์์๊ป๋ผ๋ก ๋ง๋ค์ง ๋ง์ญ์์ค. ์ํ๋/์๋ชป๋ ๊ฒ์ ๋ณด๊ธฐ๊ฐ ๋ ์ด๋ ต๊ธฐ ๋๋ฌธ์
๋๋ค. ์๋ฅผ ๋ค์ด ์์ ์๋ ๋งค์ฐ ๋ณต์กํ๊ณ "yield expression"์ ๋ฐํ ๊ฐ์ด "yield value"์ ๊ฐ์ ๊ฒ์ผ๋ก ์์ํ๊ธฐ ๋๋ฌธ์ yield
๊ฐ ํ๋ ์ผ์ ์๋ชป ์ดํดํ๋ ๊ฒ ๊ฐ์ต๋๋ค. ์์ต๋ฅ ์ result
๋ ์์ฑ๊ธฐ์ next()
( MDN )์ ์ ๋ฌ๋ ๊ฐ์
๋๋ค.
co
๋ฅผ ์ฌ์ฉํ๋ ์์ ๋ ์๋ง๋ Mocha ํ
์คํธ์์ yield
๋ฅผ ์ง์ ์ฌ์ฉํ ์ ์์ ๋๋ง ์ฌ์ฉํ ์ ์์ง๋ง IIFE๋ก ์์ ๋ฅผ ๋ํํ๊ฑฐ๋ ๋์ผํ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก ๋ ๋ช
ํํ๊ฒ ํ๊ธฐ ์ํด.
์ด๊ฒ์ ์์ฑ๊ธฐ๊ฐ ์ง์ํ๋ ๋ฐฉ๋ฒ์ ๋ํ ๊ฐ๋จํ ํ ์คํธ์ ๋๋ค(์ค๋๋ ์ Sinon์์ ์๋ํจ).
require("should");
var sinon = require("../sinon");
var foo = {
bar: function () {
return "bar";
},
biz: function *() {
return "biz";
}
};
describe("generator support", function () {
it('should work with generator functions', function(){
var spy = sinon.spy(foo, 'biz');
var iterator = foo.biz();
var result = iterator.next();
result.value.should.equal('biz');
result.done.should.equal(true);
spy.firstCall.returnValue.should.be.an.Object();
spy.firstCall.returnValue.next.should.be.a.Function();
});
});
์ด์ ์ด๋ค API ํ์ฅ์ ์ํ ๊น์?
์๋ ํ
์คํธ์์ ๋๋ ์ฐ๋ฆฌ๊ฐ ๋ค์๊ณผ ๊ฐ์ ๊ฒ์ ๋ณด๊ณ ์ถ์ดํ๋ค๊ณ ๊ฐ์ ํฉ๋๋ค.
foo.biz.firstGeneratedValue.should.equal('biz');
๋๋
foo.biz.generatedValue[0].should.equal('biz');
?
cc @ruimarinho
์๋ ํ ์คํธ์ ์ค๋ฅ๊ฐ ์์๊ณ Sinon์์ ๋ฐ์ ๊ธฐ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐ ๋ฌธ์ ๊ฐ ์์๊ธฐ ๋๋ฌธ์ ์ด ๋ฌธ์ ๋ฅผ ๋ซ์ต๋๋ค.
์์ฑ๊ธฐ(๋ฐ ๊ด๋ จ ๋ฐ๋ณต๊ธฐ)๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํ API๊ฐ ๋ฌธ์ #1467์์ ์ด๋ป๊ฒ ๋ณด์ด๋์ง์ ๋ํ ํ ๋ก ์ ์ฐธ์ฌํ์ธ์.