?????????????????????
?????Gil Tayar ???????[ 2017/6/13 13:37:55 ] ??????????????? ???????
?????????????“???????”?е????????????????????????????????е???????????????????????????????????????????????????????????????????
????????????
?????????TDD????????????????????????“???????”????????Щ?????????????????????????????????磬??????????????????
???????????????????Ajax??localStorage????IndexedDB????????????????????????????????????Щ?????????????????????????????mock??Щ????????????????Щ???????????“???????”???????????????“???????”?????????????????????????“???????”???????
??????????????Щ?????????????“???????”????????????????????????????в???????????????????????????????????????mock????????е???????????
??????????????????????????????Ajax????????I/O???????м??????????????mock??????????????????????????????????????????????????flaky?????????????????????????????????????????????м??????????????????????????????????????????????????mock????Щ??
????????????????У??????????????I/O?????DOM??????Ajax???????????????????????
????mock DOM
???????????????????????????????????mockDOM???????????????????????????????DOM????????????????????????????DOM??ζ?????????????????????ζ?????????????????????????
?????????????????????????DOM??????????????????????????????????????????????????á??????????????????jsdom?????????????????????????????????NodeJS??????DOM??
?????????????????????????Node??????????JSDom??????????DOM????I/O????????????????????????DOM?????????????з?????????????????????м?????????????????????JSDom?????????????????????Node??????????????????
?????????????????????????????????????????г????????????????????????????????????????????????????????????
???????
???????????????????????????????????????????????????????React?????React???????????????????????????????ν??????????????????????????????к????????????????????????????к???????????????
?????????????????????React??????????????????React????????????????????£???????????jsdom????????????????????е?????????
????ok????????????
???????Jsdom
constReact=require('react')
conste=React.createElement
constReactDom=require('react-dom')
constCalculatorApp=require('../../lib/calculator-app')
...
describe('calculatorappcomponent'??function(){
...
it('shouldwork'??function(){
ReactDom.render(e(CalculatorApp)??document.getElementById('container'))
constdisplayElement=document.querySelector('.display')
expect(displayElement.textContent).to.equal('0')
constReact=require('react')
conste=React.createElement
constReactDom=require('react-dom')
constCalculatorApp=require('../../lib/calculator-app')
...
describe('calculatorappcomponent'??function(){
...
it('shouldwork'??function(){
ReactDom.render(e(CalculatorApp)??document.getElementById('container'))
constdisplayElement=document.querySelector('.display')
expect(displayElement.textContent).to.equal('0')
?????????10–14?У?????render??CalculatorApp???????????????render??Display??Keypad????12??14?в?????DOM?м???????????????0??????????£???
???????????????????????Node?μ??????????????document??????????????????????????????document????????????????????????????NodeJS?С??????????д?????????????????????????Щjsdom???????????????????????????????????????????лDomenicDenicola??ElijahInsua?????????????????????????
??????10??????????document??????ReactDom??????????????ReactDom????????????????????????????Щ???????????????д???????????????
before(function(){
global.document=jsdom(`<!doctypehtml><html><body><divid="container"/></div></body></html>`)
global.window=document.defaultView
})
after(function(){
deleteglobal.window
deleteglobal.document
})
?????д????????????document???????????????????????div????????????????window???????????????????????React?????????after??????????????
????document??window???????ó?????????????????????????????????????????????????????????????????????????????????????????????У??????ava?????????????????????????д??????????????????
????????????????????ó??????React??ReactDOM???document??window??????????????????????????????????????Reactfiber????????????????????????????????????document??window???ó??????
???????????
??????μ??????????д????????????
????
ReactDom.render(e(CalculatorApp)??document.getElementById('container'))
constdisplayElement=document.querySelector('.display')
expect(displayElement.textContent).to.equal('0')
constdigit4Element=document.querySelector('.digit-4')
constdigit2Element=document.querySelector('.digit-2')
constoperatorMultiply=document.querySelector('.operator-multiply')
constoperatorEquals=document.querySelector('.operator-equals')
digit4Element.click()
digit2Element.click()
operatorMultiply.click()
digit2Element.click()
operatorEquals.click()
expect(displayElement.textContent).to.equal('84')
?????????????????????????“42*2=”?????????????“84”????????element?????????????querySelector????????????click???????????????????????????????????????
varev=newEvent("keyup"??...);
document.dispatchEvent(ev);
???????????????click???????????????????ú?????????????
???????????????????????????????????????????????????????????????????????10?????????????????????????????????????д???????????á?
????????????????????????????в???????????????????????????????????????????????????????????????????????в?????????????????????????У??????????????????????????????в????????????????????????10?????????????????????м?????????????????????????????в????
???????
???????????????????????
?????????????jsdom??????????????document??window??
????????????????jsdom????????
????????????????????????
??????
???·???
??????????????????
2023/3/23 14:23:39???д?ò??????????
2023/3/22 16:17:39????????????????????Щ??
2022/6/14 16:14:27??????????????????????????
2021/10/18 15:37:44???????????????
2021/9/17 15:19:29???·???????·
2021/9/14 15:42:25?????????????
2021/5/28 17:25:47??????APP??????????
2021/5/8 17:01:11