Slide 1

Slide 1 text

Eater @yosuke_furukawa

Slide 2

Slide 2 text

@yosuke_furukawa

Slide 3

Slide 3 text

Hello, Noders. This is Full-time Papa committer

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

child_process.spawn()

Slide 6

Slide 6 text

No content

Slide 7

Slide 7 text

Node Quiz

Slide 8

Slide 8 text

Quiz: child_process API ͷԼهͷ ҧ͍͸ԿͰ͠ΐ͏ 1. exec 2. spawn 3. fork

Slide 9

Slide 9 text

A: spawn ͕Ұ൪ϩʔϨϕϧ exec/fork ͸ spawn ͷ wrapper

Slide 10

Slide 10 text

A: exec ͸ callback Ͱड͚Δɺ fork ͸ JavaScript ͷίʔυ Λ Node.js ͱͯ͠࠶࣮ߦ͢Δ

Slide 11

Slide 11 text

child_process.spawn const spawn = require('child_process').spawn; const ls = spawn('ls', [‘-al']); ls.stdout.on('data', (data) => { console.log(data); }); ls.stderr.on('data', (data) => { console.log(data); }); ls.on('exit', (code) => { if (code !== 0) console.error(`Error occurred`); });

Slide 12

Slide 12 text

child_process.exec const exec = require('child_process').exec; exec(‘ls -al‘, (err, stdout, stderr) => { console.log(`${stdout}`); console.error(`${stderr}`); if (error !== null) { console.error(`Error occurred`); } });

Slide 13

Slide 13 text

child_process.fork const fork = require('child_process').fork; const ls = fork(‘ls.js’); ls.stdout.on('data', (data) => { console.log(data); }); ls.stderr.on('data', (data) => { console.log(data); }); ls.on('exit', (code) => { if (code !== 0) console.error(`Error occurred`); });

Slide 14

Slide 14 text

spawn > exec ͜ͷॱͰ simple exec > spawn ͜ͷॱͰ easy spawn > fork ͜ͷॱͰ simple fork > spawn ͜ͷॱͰ easy

Slide 15

Slide 15 text

Easy / Simple ͷҧ͍

Slide 16

Slide 16 text

No content

Slide 17

Slide 17 text

Simple !== Easy

Slide 18

Slide 18 text

Simple is “୯७” ٬؍తɺҰͭͷࣄ͔͠͠ͳ͍

Slide 19

Slide 19 text

Easy is “؆୯” ओ؍తɺ”୭͔”ʹͱͬͯ؆୯ “୭ʹͱͬͯ΋؆୯”͸ ଘࡏ͠ͳ͍

Slide 20

Slide 20 text

ॳ৺ऀ͕ؕΓ͕ͪͳࣄɿ Easy ͷݴ༿ʹὃ͞Ε͕ͪ ୭ʹͱͬͯ΋Easy ͳΜͯ͋Γ ͑ͳ͍

Slide 21

Slide 21 text

ॳ৺ऀ͕ؕΓ͕ͪͳࣄɿ Simple ͱ Easy Λࠞಉ͍ͯ͠ Δ࿩ʹࠔ࿭͞Ε͕ͪ

Slide 22

Slide 22 text

Eater

Slide 23

Slide 23 text

Eater is *Ea*sy *t*est runn*er*

Slide 24

Slide 24 text

Eater has one simple rule If test file outputs `stderr` message, the test failed.

Slide 25

Slide 25 text

Easy => ୭ʹͱͬͯʁ `node` ͔͠஌Βͳ͍Α͏ͳਓ mocha/jestͷࡉ͔͍ߏจΛ֮ ͑ͯͳͯ͘ɺnode ίϚϯυ ͰεΫϦϓτͱ࣮ͯ͠ߦ͢Δ ͚ͩͰΠφϑͳਓ

Slide 26

Slide 26 text

Eaterͷtest script͸ `node` command Ͱ΋࣮ߦͰ͖Δ

Slide 27

Slide 27 text

Easy => ୭ʹͱͬͯʁ mock/spyΛଟ༻͢Δ͚Ͳɺ mock/spyͷ։์࿙ΕΛ๨Ε ͕ͪͳਓʹͱͬͯ

Slide 28

Slide 28 text

Eaterͷtest͸ҰͭҰ͕ͭผϓ ϩηεͰ࣮ߦ͞ΕΔ

Slide 29

Slide 29 text

mockΛ։์͠ͳͯ͘OK // you don’t need to fix mock/spy console.log => (message) { assert(message.match(/Foo Bar/)); }; const mockDate = new Date(2016, 3, 9); Date.now = () => { return mockDate.valueOf(); }; process.exit => (exitcode) { assert(exitcode === 1); };

Slide 30

Slide 30 text

͔͠΋ϓϩηε਺͸ίΞ਺Ͱ ಄ଧͪʹͳΔ eater ——procs 4 ※procs optionͰՄม

Slide 31

Slide 31 text

Eater DEMO https://github.com/yosuke- furukawa/eater-demo

Slide 32

Slide 32 text

Happy Eater https://github.com/yosuke- furukawa/eater