ç˘ĺ°é˘ć°ăŤăusestrictăăăăłES6ć§ćă§Node> = 4ă使ç¨ăăă¨ămochaăŻĺ¤ąćăăžăă
describe('foo', () => {
this.timeout(100);
});
# => TypeError: this.timeout is not a function
ES5ć§ćăŽä˝żç¨ăŻćŠč˝ăăžăďź
describe('foo', function() {
this.timeout(100);
});
ăăă§ăă˘ăŤăŻthis
ă§ăŠăŽăăăŞéăăăŞăăŻăăăžăăďź
é˘ć°ăăăšăăłăłăăăšăăŤăă¤ăłăăăžăăăăăŻăç˘ĺ°é˘ć°ă使ç¨ăăŚăăĺ ´ĺăŻĺŽčĄă§ăăžăăă http://mochajs.org/ăă
ăăżăžăăďź
ăăăă¨ăă
ăŞăăăăťăŠĺ¤ăăŽăéćłăăăăăćçľçăŤĺéĄăçşçăăăŽă§ăăăăă ăŞăăăă§ăŻăŞăăŽă§ăăďźďź
var mocha = require('mocha');
mocha.describe('foo', (suite) => {
suite.timeout(100);
suite.it('must love bar', () => ... );
});
ă°ăăźăăŤăĺéĄăŽăăéćłăăăăžăă...ăăăJavaScriptă ăă§ăă
ăăŞăăććĄăăŚăăăŽăŻă大ăăŞé大ăŞĺ¤ć´ă§ăăăhttpsďź//github.com/mochajs/mocha/issues/1969#issuecomment-160925915ă§č°čŤăăăŚăăăăŽă§ăăć¸ăç´ăă¨ăăăăăŽăżă¤ăăŽăťăăłăăŁăŻăšăĺ°ĺ ĽăăăĺŻč˝ć§ăăăăžă:)
çĽăŁăŚăăă¨ăăă ăăăă¨ăă
@ibcăžăăăăăŻăăĺż čŚăăăăžă
var mocha = require('mocha');
mocha.describe('foo', (suite) => {
suite.timeout(100);
suite.it('must love bar', (suite) => ... );
});
ăăăă2ă¤ăŽç°ăŞăăšă¤ăźăĺźć°ăŻĺăăżă¤ăă§ăăďź ăăăăăăă§ăŻăŞăăŽă§ăăăŽăăăŞăăžăăžăŞăżă¤ăăĺć ăăăăăŤăăžăăžăŞĺ¤ć°ĺăăăăžă
var mocha = require('mocha');
mocha.describe('foo', (suite) => {
suite.timeout(100);
suite.it('must love bar', (test) => ... );
});
ă¨ăŤăăăç˘ĺ°ćźçŽĺăŻăłăłăăăšăăćĺž ăăé˘ć°ă§ăŻä˝żç¨ă§ăăžăăă
ă¨ăŤăăăăăăŤďź1969ăŽBDD UIăĺŁăăă¨ăŻćłĺŽăăŚăăžăăăă誏ĺžăăăă¨ăŻă§ăăžăă ć˘ĺăŽAPIăçśćăăBDDUIăĺŤăĺĽăŽăăăąăźă¸ăĺ°ĺ Ľăăăă¨ăç§ăŽćăżă§ăăă MochaăŤăŻăć˘ĺăŽAPIă使ç¨ăăăăźă¸ă§ăłăŽBDD UIăäťĺąăăŚăăžăăăăăŽĺžăŠă ăă使ç¨ăăŚć°ăăăăźă¸ă§ăłăŽBDD UIăăăąăźă¸ăăŞăŞăźăšă§ăăžăăăŚăźăśăźăŻăăăŽăăăąăźă¸ăŤć示çăŤă˘ăăă°ăŹăźăăăăăŠăăăé¸ćă§ăăžăă
describe
ăžăăŻsuite
ăŠăăăźăŽäťŁćżES6ć§ćă§ăăăŽĺéĄă解湺ăăĺŻč˝ć§ăăăăžăă
describe({ feature: 'create stuff' , do () {
it('abc', () => {
});
}})
ăăăŤăăăĺ°ăŞăă¨ăăšă¤ăźăăŹăăŤă§ăŽăă¤ăłăăĺŻč˝ăŤăŞăăžăă
ăăăŤé˘ăăć´ć°ăŻăăăžăăďź ç§ăŻăăăćăŁăŚăăžă
mocha = require('mocha');
mocha.describe('test', (suite) => {
suite.timeout(500);
suite.it('test', (done)=>
)
}
)
ăăăŚTypeErrorăĺĺžăăďźćŞĺŽçžŠăŽăăăă㣠'timeout'ăčŞăżĺăăă¨ăă§ăăžăă
@mroienăăăŻă˘ăŤăŽăă°ă§ăŻăăăžăăă ç˘ĺ°ăŽć§ćăŻă function
1ďź1ă§ç˝ŽăćăăăăŽă§ăŻăăăžăăă ăăŽĺśéăŤă¤ăăŚčŞăă§ăă ăă
ăăăăä˝ăăćĽăžăăăďź ç˘ĺ°é˘ć°ă大弽ăă§ăĺż čŚăŽăŞăă¨ăăŤăăăăăĺŤăĺ ´ĺăŤăŽăżăććĄăăăă˝ăŞăĽăźăˇă§ăłă弽ăă§ăă
ăżă¤ă ă˘ăŚăăŻdone
ăŤăŽăżé˘éŁăăăŽă§ăĺăŤăżă¤ă ă˘ăŚăé˘ć°ădoneé˘ć°ăŤă˘ăżăăăăŚăżăžăăăă
it('makes sense', done => {
done.timeout(100);
});
@nomilousăăăŻăžă ćŠč˝ăăžăăă ç§ăĺć§ăŽĺéĄăćąăăŚăăžăă ç§ăŽĺ ´ĺăŤćŠč˝ăăăŽăŻă it
ăăăăŻĺ
ă§setTimeout
ĺźăłĺşăăă¨ă§ăă äžăă°
it('description', done => {
const func = () => {
// assertions
};
setTimeout(func, 10000);
});
@nomilousĺćăžăăŻpromiseăčżăăąăźăšăŤăăżă¤ă ă˘ăŚăăçşçăăĺŻč˝ć§ăăăăžăă
@ andela-engmkwalusimbiăăăŻćŠč˝ăăŞăăŻăă§ăă @boneskullăć¸ăăăăăŤďź
@mroienăăăŻă˘ăŤăŽăă°ă§ăŻăăăžăăă ç˘ĺ°ăŽć§ćăŻăé˘ć°ă1ďź1ă§ç˝ŽăćăăăăŽă§ăŻăăăžăăă ăăŽĺśéăŤă¤ăăŚčŞăă§ăă ăă
ăžă ăăăŤă¤ăăŚçĺăŤćăŁăŚăăäşşăŻăç˘ĺ°é˘ć°ăä˝ăćĺłăăăŽăăç解ăăŚăăăăăăŤćťăŁăŚčŞăă§ăă ăăďźăăăç§ăăăăŻăăăŤăă誏ćă§ăăăŞă˝ăźăšăăăăăăăăžăďźă
ăăŽĺ ´ĺăăăŽç˘ĺ°é˘ć°ăćŠč˝ăăĺŻä¸ăŽćšćłăŻă this
ăĺŠç¨ăă䝣ăăăŤă bdd
APIăĺ¤ć´ăăŚcontext
ăŞăă¸ă§ăŻăăăăšăŚăŽRunnableăŽďźăăăŻăăăšăďźăłăźăŤăăăŻăŤć¸Ąăĺ ´ĺă§ăă this
ă ăăăŻćŞăčăă§ăŻăăăžăăăăăăăŻĺŁćť
çăŞĺ¤ĺăŽĺ°éăŞăŽă§ăćąşăăŚčľˇăăăžăăă ăăăŽäťŁăăăŤďź
it('should do something', function (done) {
this.timeout(9000);
// stuff
done();
});
揥ăŽăăăŤăŞăăžăă
it('should do something', (context, done) => {
context.timeout(9000);
done();
});
ăă䝼ĺ¤ăŽĺ ´ĺăŻä¸ä˝äşćć§ăăăăăŠăăăŤé˘äżăŞăăĺĺ¨ăăăăšăŚăŽéĺćMochaăăšăăćŠč˝ăăŞăăŞăăžăă
it('should do something', function (context, done) {
// context is unused, but 'done' is now the second parameter
this.timeout(9000);
done();
});
ăă ăăăăăčĄă䝣ćżăŽbdd
ĺŽčŁ
ăćäžăăăă¨ăă§ăăžăăăăăăŻăăăŠăŤăă§ăŻăăăžăăă
ăăăŻç§ăăăăŽĺéĄăăŠăăŤăăăŽăăăŤă¤ăăŚç§ăćăŁăŚăăćăĺžšĺşçăŞčŞŹćăŤă¤ăăŚă§ăă ďźçŹéĄďź
ĺ¤ĺăăăŻćŹĄăŽăĄă¸ăŁăźăăźă¸ă§ăłăŽăăăŤčć ŽăŤĺ Ľăăăă¨ăă§ăăžăăďź äťŁćżăŽbddĺŽčŁ ăä˝ćăăăŽăŤĺĺéčŚăŞĺ¤ć´ă§ăŻăŞăă¨ćăăžăă ĺĺäťăĺźć°ăćă¤ăă¨ăŻăĺ°ćĽăŽéçşăŤă彚çŤă¤ĺŻč˝ć§ăăăă揥ăŽăăăŞăăšăăăăŤăŚă§ă˘ăčż˝ĺ ăăç°ĄĺăŞćšćłăä˝ćăăĺŻč˝ć§ăăăăžăă
it('should do something', function ({ context, done }) { ...
ăă ăăăăăčĄă䝣ćżăŽbddĺŽčŁ ăćäžăăăă¨ăă§ăăžăăăăăăŻăăăŠăŤăă§ăŻăăăžăăă
@boneskullć°ăăbdd-es6ă¤ăłăżăźăă§ăźăšăŻç´ ć´ăăăă§ăăă:)
.filter(i => i.val)
ăăăŞé
ĺé˘ć°ăŞăŠăŤćŹĺ˝ăŤĺ˝šçŤă¤ç˘ĺ°é˘ć°ă大弽ăă§ăăăé常ăŽé˘ć°ă使ç¨ăăĺ ´ĺăŽĺéĄăŻä˝ă§ăăďź ćŻĺ誏ćăăĺż
čŚăăŞăăŽă§ăă°ăăźăăŤăŤčŞŹćăăŚăăă¨é常ăŤäžżĺŠă ă¨ćăăžăă ăžăă this
éćłăŻăă¤ăăă§ăăďźďźç˘ĺ°ďźé˘ć°ăç解ăăŚăăŞăăăă§ăăďź ç´ćăčżăăă¨ăă§ăăăăłăŤĺ¤ć°ăćäžăăăăŞăăŽăŻééăăăăžăăăăăăăŞăă¨ăăăŁă¨ĺăŤavaăŽăăăŞăăŽăŤĺăćżăăŚăăă§ăăăă ă˘ăŤăŽăˇăłăăŤăăŤé˘ăăŚăŻăďź1969ă§čŞŹćăăăŚăăé常/ç˘ĺ°é˘ć°ăŤĺ¤§ăăŞĺ¤ć´ăŻăŞăăŻăă ă¨ćăăžăă ăžăăă¨ăăŁăżăźăŻĺä¸ăŽf
ăfunction () {\n\t\n}
ĺ¤ćă§ăăăăăç˘ĺ°é˘ć°ăŽćšăĺ
Ľĺăéăă¨ăŻč¨ăăŞăă§ăă ăăă
ăăăăăăžăăăăç˘ĺ°é˘ć°ă使ç¨ăăbefore()
ĺźăłĺşăăăżă¤ă ă˘ăŚăăă解湺çăŻăăăžăăďź
before( async function () {
data = await provider.getData();
console.log(data);
this.timeout(30*1000);
});
ĺšćăŻăăăžăăă ăăă§ăŻăžă 4ç§ăŽăżă¤ă ă˘ăŚăăçşçăăŚăăžăă ăăăŻç§ăŽăăšăăšă¤ăźăă§ĺŻä¸é
ăăă¨ă§ăă ĺéĄă解湺ăăăăăŤmocha.opts
ă§ăżă¤ă ă˘ăŚăă30ç§ăŤč¨ĺŽă§ăăžăăă30ç§ĺžăŤăăšăŚăŽăăšăăăżă¤ă ă˘ăŚăăăĺż
čŚăŻăăăžăăă99ďź
ă§4ç§ă§ĺéĄăăŞăĺ ´ĺăŻ1ĺăŽAPIĺźăłĺşăă ăă§ăă
ăăŽéăŤç§ăăăă解湺ăăćšćłăŻćŹĄăŽă¨ăăă§ăďźćĺăŽdescribe()
ăŻĺ¤Şăç˘ĺ°ć§ćăŽäťŁăăăŤfunction
使ç¨ăăŚăăăă¨ăŤćł¨ćăăŚăă ăăďź
describe('Search API', function () {
this.timeout(30*1000);
context('search', () => {
let data;
before( async () => {
data = await provider.getSearch();
});
it('returns results', () => {
expect(data).to.exist;
expect(data.results).to.be.instanceOf(Array);
expect(data.results.length).to.be.above(0);
});
})
});
@chovy await provider.getData()
ăżă¤ă ă˘ăŚăăçşçăăĺžăŽăżă¤ă ă˘ăŚăăč¨ĺŽăăŚăăžăă
䝣ăăăŤăăă使ç¨ăăŚăżăŚăă ăăďź
before(async function () {
this.timeout(30*1000); // set timeout first, then run the function
data = await provider.getData();
console.log(data);
});
ăăăăăăžăăăăç˘ĺ°é˘ć°ă使ç¨ăăbeforeďźďźĺźăłĺşăăăżă¤ă ă˘ăŚăăă解湺çăŻăăăžăăďź
ăăăć確ăŤăăăăăŤăçžĺ¨ăç˘ĺ°é˘ć°ă使ç¨ăăŚă˘ăŤăŽtimeout
ăĺźăłĺşăćšćłăŻăăăžăăă 䝣ćżćĄďźăă ăăăĄăŞăăăăăďźăŤă¤ăăŚăŽč°čŤăŻăčăăăăć°ăăďźăžăăŻĺ°ăŞăă¨ăĺ¤ć´ăăăďźă¤ăłăżăźăă§ăźăšăŤă¤ăăŚăŽč°čŤă§ăă
ç§ăăă°ăăé ăŤç˝ŽăăŚăăăă¨ăă§ăăăă¨ă§ăăďź
it('...', (done) => {
...
done()
})
ă¨
it('...', (t) => {
t.timeout(500)
t.tag('integration', 'api')
...
t.done()
})
ĺăăăăŠăŤăăŽă¤ăłăżăźăă§ăźăšă使ç¨ăăžăă
ĺăăăăŠăŤăă¤ăłăżăźăă§ă¤ăšă§ä¸Ąćšăăľăăźăăăăă¨ă§ăć˘ĺăŽăłăźăăăźăšă§ç˘ĺ°é˘ć°ăŽä˝żç¨ăéĺ§ă§ăăžăă ăŞăłăŠă¤ăłăŽĺ¤ăăŽăăĽăźăăŞă˘ăŤăŤăă(done)
ć§ćăŻăăăŠă°ăŞăŠăăŞăăŚăćŠč˝ăăăă¨ăććăă䞥ĺ¤ăăăăžăă
ăăăăŁăŚăăăŽĺŽčŁ
ă§ăŻăăăŠăĄăźăżă¨ăăŚĺžćĽăŽdone
é˘ć°ăĺĺžăăžăăăăŚăźăăŁăŞăăŁé˘ć°ăŻăăŽdone
é˘ć°ăŞăă¸ă§ăŻăăŽăăăăăŁă¨ăăŚčż˝ĺ ăăăžăă
this.timeout()
ă¨ăçľéćéăăŹăăźăăŤčĄ¨ç¤şăăăŞăăŞăăžăă
@dasilvacontinăŞăç§ăăĄă䝼ĺăŤăăăčăăŞăăŁăăŽă
@dasilvacontinăăăčŚăăŚăăžăă ăăŞăăŻăăăĺźă°ăŞăăă°ăŞăăŞăăŽă§ă ăăŞăăŻăăăăŞăăăăăăžăăă
çłă訳ăăăžăăăă@ boneskullăăăăăĺźăłĺşăăŞăăă°ăŞăăŞăăăŤă¤ăăŚčŠłăă誏ćă§ăăžăăďź ă˘ăŤăăăšăăéĺćă§ăăă¨čăăĺéĄăŤă¤ăăŚčŠąăăŚăăăŽă§ăăďź
2017ĺš´1ć29ćĽăŤăŻăĺĺ5ć54ĺă§ăăŻăŞăšăăăĄăźăťăăŠăź[email protected]ăŻć¸ăăžăăďź
@dasilvacontinăăăčŚăăŚăăžăă ăăŞăăŻăăăĺźă°ăŞăăă°ăŞăăŞăăŽă§ă ăăŞăăŻăăăăŞăăăăăăžăăă
â
ăăŞăăč¨ĺăăăăŽă§ăăŞăăŻăăăĺăĺăŁăŚăăžăă
ăăŽăĄăźăŤăŤç´ćĽčżäżĄăăăăGitHubă§čĄ¨ç¤şăăăăăšăŹăăăăăĽăźăăăŚăă ăăă
ăžăăătăă使ç¨ăăă¨ăăŤéĺćăăšăăčĄăćĺłăăŠăŽăăăŤĺŽŁč¨ăăžăăďź
ăăźăă§ăŻă常ăŤăt.doneăďźAPIă§ăŻăt.endăďźăĺźăłĺşăăăäşćłăăăă˘ăľăźăˇă§ăłăŽéďźăt.planăďźăč¨ĺŽăăĺż čŚăăăăžăă
ăŞăăˇă§ăłă使ç¨ăăŚitďźďźăŤ3çŞçŽăŽĺźć°ăčż˝ĺ ăăăă¨ăŻĺŻč˝ă§ăăăăďź ăăăŻAPIăĺŁăăă¨ăŻăăăžăăă
it ('accepts lambda', (done)=>{ doWork(); done(); }, {timeout:60000});
@boneskull
ăłăłăăăšăăćĺăŤç˝Žă䝣ăăăŤăăăăăŞăăˇă§ăłăŽ2çŞçŽă ăŁăĺ ´ĺăŻăŠăăŞăăžăăďź
ăăăŽäťŁăăăŤďź
it('should do something', function (done) {
this.timeout(9000);
// stuff
done();
});
揥ăŽăăăŤăŞăăžăă
it('should do something', (done, context) => {
context.timeout(9000);
done();
});
it('should do something', function (done, context) {
// context is unused, but 'done' is now the second parameter
this.timeout(9000);
done();
});
ăă ăăăăăčĄă䝣ćżăŽbddĺŽčŁ ăćäžăăăă¨ăă§ăăžăăăăăăŻăăăŠăŤăă§ăŻăăăžăăă
ăăăŻç§ăăăăŽĺéĄăăŠăăŤăăăŽăăăŤă¤ăăŚç§ăćăŁăŚăăćăĺžšĺşçăŞčŞŹćăŤă¤ăăŚă§ăă đ
ăžăăŻăăłăłăăăšăăĺŽçžŠć¸ăżăŽăăŠăĄăźăżăŤăăĺż čŚăăăĺ ´ĺ
it('should do something', function (done, override) {
// context is unused, but 'done' is now the second parameter
override.timeout(9000);
done();
});
ăăăăç§ăăăăŠăŤă䝼ĺ¤ăŽă¤ăłăżăźăă§ăźăšăĺăăžă:)
done
ăĺż
čŚă¨ăăă˝ăŞăĽăźăˇă§ăłăŽćŹ çšăŻăpromiseăčżăćšăç°ĄĺăŞĺ ´ĺă§ăă done
ă使ç¨ăăĺż
čŚăăăăă¨ă§ăă čŞĺă§č¨ăă°ă return
ăăă.then(()=>{done()}, done)
function
ă¨return
ăťăăăăă¨ćăăžăă
@FlamencoăăăŻčĺłćˇąăă˘ă¤ăă˘ă§ăăăé˘ć°ăćĺžăŤćă¤ćšăăăăăăăăžăăďźăăă§ăăćčĄçăŤăŻăéćłăŽăăăŞăćšćłă§ăăăăăăŤç´é˘ăăŚăżăžăăăăăăŠăĄăźăżăźăé˘ć°ă§ăăăăŠăăă確čŞăăăŽăŻç°Ąĺă§ă使ç¨ăăăŽăŤĺĺç´ćçă§ăăăăŚăăăŽăăăŞăéćłăăĺŁăăĺŻč˝ć§ăŽăăäťăŽăă税ăŽć˝čąĄĺăŤă˘ăŤăäžçľŚăăăŚăăăăă§ăŻăăăžăăă ăăŽăăăŞăŞăăˇă§ăłăŞăă¸ă§ăŻăă使ç¨ăăŚăăżă°ăäżçä¸ăŽăăšăăŽççąăćäžăăăă¨ăă§ăăžăăăăăăŻä¸Ąćšă¨ăăčŚćąăăăćŠč˝ă§ăďźGitHubăŽĺéĄ/ PRăŞăšăăŽć¤ç´˘ăăăŻăšă§ăăăăčŚă¤ăăăă¨ăŻăčŞč ăŽçˇ´çżĺéĄă¨ăăŚćŽăăăŚăăžăďźăĺć ăăăă¨ăčŞăăžăďźĺ˝źăăŽä¸ĺ¨ăĺéżăăăă¨ăĺŻč˝ă§ăăă¨ăăŚăăĺéżçăăăćŹçŠăŤĺŠçšăăăăžăďźă
@ScottFreeCodeç§ăŻdone
ăŤă¤ăăŚăŻééăăŞăĺćăăžăăç§ăăăă使ăăăăŞăăŽă§ăăăłăłăăăšăăćĺă¨ćĺžăŤç˝Žăĺż
čŚć§ăŤă¤ăăŚăłăĄăłăăăboneskullăćäžăăĺčż°ăŽäžă使ç¨ăăžăăă
ăłăłăăăšăă渥ăăăes6ăĺŽčĄăăăăăŤmochaăŤăšă¤ăăăč¨ĺŽăăăŞăăˇă§ăłă揲ăăă ăă§ăă
ăăŽéăăăźăăźăŤčŚăăfunctionďźďźĺźăłĺşăă§ăżă¤ă ă˘ăŚăăŽéăăĺż čŚă¨ăăăăă¤ăăŽăăšăăŽčŞŹćăăŠăăăăŚăăžăă
ăŤăšăżă ăżă¤ă ă˘ăŚăăĺż čŚăŞç˘ĺ°é˘ć°ăăpromiseămochaăŤčżăăăăŚăźăšăąăźăšăŽĺéżçăčŚă¤ăăžăăăăăăŻăäťăŽäşşă彚çŤă¤ă¨ćăŁăĺ ´ĺăŤĺăăŚĺ ąćăăăă¨ćăăžăă
䝼ä¸ăŽăăăŤĺŽçžŠăăă揥ăŽwhen
é˘ć°ăăăšă厣č¨ăŤčż˝ĺ ăăăă¨ăŤăăă揥ăŽăăăŤăŞăăžăă it('does something', when(() => someFunctionReturningAPromise, customTimeout))
ç˘ĺ°é˘ć°ăăăăăăăă¨ăŞăăă˘ăŤăżă¤ă ă˘ăŚăăč¨ĺŽă§ăăžăă
ĺć§ăŤăpromiseăŽăżă使ç¨ăăŚăăăăăĺŽäşăăăłăźăŤăăăŻăŽäťŁăăăŤăćĺăŽăăŠăĄăźăżăźăăăšăăŤĺĺĺžăăŚăăłăłăăăšăăŤć¸Ąăăă¨ăă§ăăžăďź it('can access the mocha test context', when(testContext => someFunctionThatNeedsContext(testContext))
const when = (lambda, timeout) =>
function() { // return a plain function for mocha to bind this to
this.timeout(timeout || this.timeout() || 1000)
return lambda(this)
}
誏ćăăăăă¤ăăŽăăšăăąăźăšďź
const delay = timeout =>
new Promise((resolve, reject) => setTimeout(resolve, timeout))
const deject = timeout => // similar to above, but a delayed reject
new Promise((resolve, reject) => setTimeout(reject, timeout))
describe('mocha testing', () => {
context('with only arrow functions', () => {
context('tests that do not time out', () => {
it('passes fast', when(() => delay(10), 100))
it('does not usually time out', when(() => delay(2000), 2010))
})
context('tests that will time out', () => { // these should fail if the 'when' function works properly
it('times out fast', when(() => delay(1000), 10)) // will fail in 10ms
it('times out', when(() => delay(1000), 1000)) // will fail in about 1000ms
})
context('tests that will reject', () => { // this shows the when function works as expected when a test rejects
it('fails fast', when(() => deject(10), 100))
})
})
})
@ astitt-ăŞăăăŤăăăăžăăŻĺăŤfunction () {}
ă¨ć¸ă... Wtfďź
ăăăăžăăăăŤăŤăăăżĺˇă :-)
ç˘ĺ°é˘ć°ă¨ăŽéăăŻăćťăăăšăăăă§ăăăă¨ă§ăă ă§
es6ăżă¤ăăŽăťăăă˘ăăăăăăŻăă§ăŤpromiseăŽä¸čŹçăŞăăżăźăłă§ăăĺŻč˝ć§ăăăăžă 'then'
ăă§ăźăłă
ăăŞăăććĄăăăăăŤăăăăŚç§ăçĽăéăăé˘ć°ăăăăŻă使ç¨ăăă¨ă
ç´ćăŻć示çă§ăŞăăă°ăŞăăžăăă ćä˝éăpromiseăăźăšăŽăăšăćŠč˝
{...}ăééăŁăŚăăăăăšăăŻĺ¸¸ăŤăăŽç´ćăčżăăŞăăă°ăŞăăŞăăŽă§ăćĺ°é
ćĺšăŞčŞćĺăŻĺŽéăŤăŻćŹĄăŽă¨ăăă§ăďźfunction {return ...}ă ăă䝼ĺ¤ăŽĺ ´ĺăŻ
ăăšăăŻăăăŁăšăăăăăăăăăăšă§ăŻăŞăăćŞĺŽçžŠăă˘ăŤăŤčżăăžă...ăăăŚ
ăăšăăŽä˝č
ăŻćŞăćéăéăăăŚăăžăă
ăłăźăăăźăšĺ
ăŽăťă¨ăăŠăŽăłăźăăăă§ăŤpromise.thenăăăŽç˘ĺ°é˘ć°ă§ăăĺ ´ĺ
ăăăł/ăžăăŻé˘ć°ĺăăă°ăŠăăłă°ăšăżă¤ăŤăé˘ć°ăŽćťăĺ¤ăčż˝ĺ ăăă¨ă揥ăŽăăăŤăŞăăžăă
ä¸č˛Ťć§ăăăăžăăă 䝣ăăăŤăććĄăăăăăă¤ăăăŠăźă ăĺŠç¨ĺŻč˝ă§ăă
ĺžćĽăŽćŠč˝ăăăç˘ĺ°ă¨ăăćŠč˝çăŞăšăżă¤ăŤă弽ă
ăłăźăŤăăăŻăžăăŻé˘ć°ăŽćťăăšăżă¤ăŤă ăăŽăăç°Ąć˝ă§ă
decribe context it dslç§ăăĄăŻçăăăšăăć¸ăăŽă弽ăă ă¨ăăăă¨ăŤĺćăăžăă
éĺćăăă°ăŠăăłă°ăŽć˝čąĄĺjavascriptăĺŚçăăpromiseă誏ćăă
čŻăă ăžăăç§ăăĄăŽäť˛éăăăŞăĺ ´ĺă§ăăfunction + returnăăăçăă§ăďź
whenďźďźďź=> ...ďźă
ĺ¤ĺăăăŻăăŽăăă¸ă§ăŻăăŽĺĽ˝ăžăăăšăżă¤ăŤă§ăŻăăăžăăăç§ăŻăăăç解ăăŚăăžăăăăăŚ
ăăă¸ă§ăŻăăŽĺ¤ć´ă¨ăăŚććĄăăŚăăžăăă ĺ¤ĺăăŽĺść°
ăăŞăăŽwtfăćĺłăăăăăŤééŁăăăă¨ăă§ăăžăă ăăăŻăăă§ăă ă˘ăŤăŻä¸çˇăŤĺăĺż
čŚăăăăžă
pre-fpăăŹăłăăŞăźăŞjsă ä¸ä˝äşćć§ăŻăăĄăźăšăăŻăŠăšăŽć¸ĺżľäşé
ă§ăă ăăă
ăžăăçăŤăăŞăŁăŚăăžăă
ăăăŻéˇăăŚčĄă芰ăžăŁăăšăŹăăă§ăăăăăăŻ1ă¤ăŽćšćłă§ăă 1ç´ ćľăŞ
javascriptăŤă¤ăăŚăŽăă¨ăŻă1ă¤ăŽćšćłăžăăŻ1ă¤ăŽăšăżă¤ăŤă§ăăĺż
čŚăŻăŞăă¨ăăăă¨ă§ă
çŠäşăćăéăăă ăšăżă¤ăŤăŤă¤ăăŚăŻăžăŁăăĺćăăĺż
čŚăŻăăăžăăă ćŠč˝çăŤ
芹ăă¨ăç§ăŽäťĽĺăŽć稿ăŻäşşă
ăŤç˘ĺ°ă¨ç´ćă使ç¨ăăćšćłăćäžăăžă
ă˘ăŤă¸ăŽă˘ăŻăťăšăăăăăăăă¨ăŞăăä¸č˛ŤăăŚăăšăDSLă§
ăłăłăăăšăăăŻăŞăźăłă§é˘ć°ĺăăă°ăŠăăłă°ăŤéŠăăćšćłă§ă
䝼ĺăŤććĄăăăžăăă
ăăăă¨ăă
ăłăźăăăźăšĺ ăŽăťă¨ăăŠăŽăłăźăăăă§ăŤ...é˘ć°ĺăăă°ăŠăăłă°ăšăżă¤ăŤă§ăăĺ ´ĺ...
...揥ăŤăĺä˝ăŽč¨ĺŽăŤthis.mutatingMethod(currentConfiguration)
ă使ç¨ăăăă¨ăŻăçšăŤăă§ăŤĺŽčĄăăăŚăăé˘ć°ďźăžăăŻăľăăŤăźăăłďźăŽĺä˝ăč¨ĺŽăăăăăŤă return
ďźĺăŞăć§ćďźăč¨čż°ăăăăăăŻăăăŤä¸č˛Ťć§ăăăăžăăă ăăăăŚä¸č˛Ťć§ăŽăŞăĺ¤čŚłăŻăĺŽéăŤççžăĺ°ĺ
ĽăăăŽă§ăŻăŞăăăăŽçžĺŽăăăćç˝ăŤăăă§ăăăă
ďźčŞ¤č§ŁăăŞăă§ăă ăăăJSă§é˘ć°ĺăăă°ăŠăăłă°ăŽă˘ă¤ăă˘ăŽäşşć°ăéŤăžăŁăŚăăăă¨ăŤé常ăŤćşčśłăăŚăăžăăăăăă function
/ return
ă¨=>
ăŽć§ćăŻé˘ć°ĺăăă°ăŠăăłă°ăŤĺŽéăŤä¸ĺŻćŹ ă§ăŻăŞăăăăŽăăŠăă¤ă ă§ä˝ăăăăŻăŞăźăłăŤĺä˝/ăťăăłăăŁăŻăšăăăŽćçšă§ç˘ĺ°é˘ć°ă¸ăŽĺăćżăăŻăăăăç°Ąĺă§ă...ďź
this.timeoutăŻçŞçśĺ¤ç°ă§ăăăé˘ć°ĺăăă°ăŠăăłă°ăŽăăŠăă¤ă ăăĺ¤ăăŚăăăă¨ăŤĺćăăžăă ăăĄăăăăăŽĺŽĺ ¨ăŤä¸č˛Ťć§ăăăăžăăă çžĺ¨ăthis.timeout䝼ĺ¤ăŤăăšăăă¨ăŤăŤăšăżă ăżă¤ă ă˘ăŚăă厣č¨ăăćšćłăŻăăăžăăďź
mochaăŽçžĺ¨ăŽĺŽčŁ ă§ăŻăĺ˝äť¤ĺ/ĺ¤ç°ĺăŽăăŠăă¤ă ăŤćťăăăăăšăăżă¤ă ă˘ăŚăăă¨ăŽč¨ĺŽăăăăăăĺż čŚăăăăăă§ăă ăŠăĄăăä¸ćšă
ä¸č¨ăŽwhen
ć˝čąĄĺă§ăŻăăżă¤ă ă˘ăŚăăŻwhenăŽ2çŞçŽăŽăăŠăĄăźăżăźă§ăăăćŠč˝ăšăżă¤ăŤăăăšăăŽăŹăăŤăŤçśćă§ăăžăă FPă˘ăźăăăĺ˝äť¤ĺăăă°ăŠăăłă°ă¸ăŽăăŽéżăăăăŞăčąĺşăé ăăžăăăăăăŻ1ăćă§čĄăăžăă ăžăăç˘ĺ°é˘ć°ăŤă˘ăŤăłăłăăăšăă¸ăŽă˘ăŻăťăšăćäžăăžăăăăăŻăăăšăé˘ć°ăŽăăŠăĄăźăżăźčŚĺăŤéĺăăŞăéăä¸ĺŻč˝ă§ăă ăăăăŁăŚă誰ăăăăšăăŠăłăăźăŽă˘ă¤ăă˘ăć˘ćąăăăžă§ăćŤĺŽçăŤăăŽăăă¸ă§ăŻăăŽä¸é¨ăŽăŚăźăśăźăŽăăă¤ăăŽĺéĄă解湺ăăĺŻč˝ć§ăăăăžăďźăăŽĺéĄăŽĺąĽć´ăăĺ¤ćăăžăďźă
ăžăăç§ă誤解ăăŞăă§ăă ăăă é˘ć°ĺăăă°ăŠăăłă°ăăăĽăźăŞăłă°ăăˇăłăăć´žçăăĺ˝äť¤ĺ/çŞçśĺ¤ç°ĺăăă°ăŠăăłă°ăŤĺŽĺ ¨ăŤĺăŁăŚäťŁăăă¨ăŻćăăžăăă ăă¨ăă°ăăťă¨ăăŠăăšăŚăŽĺ ´ĺăJSăŠăłăżă¤ă ă§ăŻăé˘ć°ĺăăŠăăăŤé˘äżăŞăăăłăźăăŻćçľçăŤăăăäźçľąçăŞĺ˝äť¤ĺďźăăăăăc ++ă§ăăăĺż ăăăăăă§ăŻăăăžăăďźă§č¨čż°ăăăăăă°ăŠă ăŤăăŁăŚč§ŁéăăăžăăăăŽăăă°ăŠă ăŻăăăĽăźăăźăˇă§ăłăä¸ĺżăŤč¨čż°ăăăăŞăăŹăźăăŁăłă°ăˇăšăă ă§ĺŽčĄăăăžăăăăăŚĺ˝äť¤ĺăŽă˘ă¤ăă˘ďźăăăăCďźă ăĄă˘ăŞăŻĺşĺŽăŞă˝ăźăšă§ăăăä¸ĺ¤ăŽăăźăżć§é ăŻăŠăłăżă¤ă ăç§ăăĄăŤĺăăĺă§ăă ăăŽĺşćŹçăŤĺż é ăŽă˘ăăŤăŻăăłăłăăĽăźăăŁăłă°ăŽăăăŠăŤăă§ăăăăăăŤă¨ăŠăžăăžăă ăăăăăăăŻé˘ć°ĺăăă°ăŠăăłă°ăăăŽä¸ăŤĺ ąĺă§ăăŞăă¨ăăćĺłă§ăŻăăăžăăă ăăăăăŞăăFPăłăźăăćă ĺşç¤ă¨ăŞăă˘ăăŤăŤăăăăăăŚăłăăŞăăă°ăŞăăŞăăă¨ăŻéżăăăăžăăă ăăăŻăç§ăăĄăćăćăăŚăăŽăăšăŚăŽć§ćăč¨ăăă¨ăćĺłăăăšăă§ăŻăŞăă¨ćăăžăăăăăŚăfunction / returnă使ç¨ăăžăăăă
=>é˘ć°ăŽäťŁăăăŤfunction / returnă使ç¨ăăŚé˘ć°ĺăăă°ăŠăăłă°ăĺŽčĄă§ăăăŽă¨ĺăăăăŤăĺŽéăŤăŻă芳細ăŤä¸ĺŽăŽč¨ąĺŽšçŻĺ˛ăä¸ăăăăă°ăCă§é˘ć°ĺăăă°ăŠăăłă°ăĺŽčĄă§ăăžăă ç´ćăčżăăă¨ăĺżăăŞăă§ăă ăăă CăŽFPăŻăĺ ĽĺăŤĺ°ăćéăăăăăžăăăçľĺąăŽă¨ăăăăăăŻĺăŞăć§ćă§ă... / s
çľĺąăŽă¨ăăăç˘ĺ°é˘ć°ă使ç¨ăăă¨ăăŠă ăč¨çŽă˘ăăŤă§ä¸čŹçăŞč¨čŞă§ä˝ćĽăăăăăŽĺŽčĄĺŻč˝ă§ĺŽç¨çăŞćšćłăŤĺžă ăŤčżăĽăăă¨ăă§ăăžăă ăăăăŽä˝ĺăŞćĺăĺé¤ăăă¨ăĺ°ăăăŞăăăéčŚăŞéăăçăăžăă ăžă ĺ¤ăăŽĺŽéçăŞĺśéăăăăžăăăăăăăŽĺ¤ăăŻč§ŁćąşĺŻč˝ă§ăăăçŽĺăŽä¸ťéĄăŻăăăăŽ1ă¤ă§ăă
ăăăăăŽćšćłă ććĄăăăăŤăăźé˘ć°ă使ç¨ăăžăăăäťăŽäşşăčŞçąăŤä˝żç¨ă§ăăăăăŤăŞăăžăăă ăăŞăăŽăăšăăŠăłăăźă˝ăŞăĽăźăˇă§ăłă漽ăăżăŤăăŚăăžăăăăăăžă§ăŽéăăŠăŽć§ćăéčŚăăŠăăăŤă¤ăăŚç§ăăĄčŞčşŤăŽćčŚă誏ĺžăçśăăăă¨ăçšăŤççŁçă§ăăăăŠăăăŻăăăăžăăăä¸ă¤ăŽćšćłă§ăă ç§ăŻç˘ĺ°ă弽ăă§ăăăŞăăŻćŠč˝ă弽ăă§ăă ç§ăŽčŚćšăĺ¤ăă誏ĺžĺăŽăăč°čŤăčŚăăă¨ăăăăžăăă ç§ăŻ1ă¤ăŤăŞăźăăłă§ăăăăfunctionăwtfă使ç¨ăăă ăăăăăăŁă¨ĺéˇăŞ_syntax_ă§fpăĺŽčĄă§ăăăăŞăŠăă˛ăăžăăăăăăăčăăăťăăăăă§ăăăă
ĺĽăŽćšćłă§ĺéĄă解湺ăăă°ă誰ăwhen
ă使ç¨ăăĺż
čŚăŻăăăžăăă č¨ăŁéĺăăă :-)
ăăăŻăç§ăăĄăćăćăăŚăăŽăăšăŚăŽć§ćăč¨ăăă¨ăćĺłăăăšăă§ăŻăŞăă¨ćăăžăăăăăŚăfunction / returnă使ç¨ăăžăăăă
ç§ăŻç˘ĺ°ă弽ăă§ăăăŞăăŻćŠč˝ă弽ăă§ăă
...揥ăŽăăăŞă˛ăăžăăăăăăăčăăăťăăăăă§ăăăďź...ăăăŁă¨ĺéˇăŞć§ćă§fpăĺŽčĄă§ăăžăăă
ăăăŻç§ăč¨ăŁăăă¨ă¨ăŻăťă¨ăăŠéă§ăăă this
ăăžă 使ç¨ăăŚăăç˘ĺ°é˘ć°ăŻăăăăFPă§ăŻăŞăăç˘ĺ°é˘ć°ă使ç¨ăăOOăŤăŞăă¨ăăäşĺŽăčăăŚăăžăăďźĺžćĽăŽJSé˘ć°ă使ç¨ăăFPăŽéďźă č¨ăćăăă°ăăăăĺăŞăç°ăŞăć§ćă§ăăăŠăăăăćŹĺ˝ăŽĺéĄăŻăć§ćăŽéäşćć§ăăăăăŠăă¤ă ăŽéäşćć§ă桹ăăă¨ă§ăďźMochaăŻçžĺ¨ă¨ăŤăăč¨č¨ăăăŚăăăăďźă
this
ĺŽĺ
¨ăŤăăŠăĄăźăżăźăŤç˝ŽăćăăăăăŤăMochaăŽä¸ăŤäťŁćżă¤ăłăżăźăă§ăźăšăć§çŻăăăă¨ăŻăăŞăĺŻč˝ă§ăăă¨ç˘şäżĄăăŚăăžăă ăăšăăć¸ăéăŤFPăŤčĄăăăăŽăŞăăă˘ăŤăŽthis
ăç˘ĺ°é˘ć°ăŤć¸Ąăćšćłăčăĺşă䝼ä¸ăŽăă¨ăăăŞăăă°ăŞăăŞăăă¨ăć確ăŤăăŚăăăăă¨ćăăžăă ăăăç§ăŻăććŚăŽăăŽç¨ŽăŤä¸ćăăăăăŤé常ăŤĺ¤ăăŽă§ăă ; ^ďź
ďźă˘ăŤăŤăŻăăšăăźăăăŤăă°ăăźăăŤăăžăăŻăăăŤćŞăăă¨ăŤä¸ĄćšăŽĺä˝ăăăă¤ăăăăžăăăçžćçšă§ăŻăăăăăä¸čŚ§čĄ¨ç¤şăăç°ĄĺăŞćšćłăčăĺşăćéăăăăžăăă Mochaăč¤ć°ĺĺŽčĄăăăă¨ăĺă塝ăĺéĄăŻăăăŽä¸äžă§ăăďź
çžĺ¨ăthis.timeout䝼ĺ¤ăŤăăšăăă¨ăŤăŤăšăżă ăżă¤ă ă˘ăŚăă厣č¨ăăćšćłăŻăăăžăăďź
ćŽĺżľăŞăăăç§ăŻăăŞă確俥ăăŚăăžăă ć§ćč¨ĺŽăŽăăźĺ¤ăăăďźJSăŞăă¸ă§ăŻăă¨ăăŚďźă¨ăŞăit
ă¸ăŽčż˝ĺ ăăŠăĄăźăżăźăĺăĺ
Ľăăă¨ăăććĄăŻă誰ăăćăăŞăăMochaăŽăžă¨ăăŞĺ°ćĽăŽč§ŁćąşçăŽăăăŤčăăăžăăĺŽčŁ
ăăŚăżăŚăă ăăă
çžĺ¨ăthis.timeout䝼ĺ¤ăŤăăšăăă¨ăŤăŤăšăżă ăżă¤ă ă˘ăŚăă厣č¨ăăćšćłăŻăăăžăăďź
ćŽĺżľăŞăăăç§ăŻăăŞă確俥ăăŚăăžăă
ăăŽčŠłç´°ă確čŞăăŚăăă ăăăăă¨ăăăăăžăă ăăăŻç§ăč¨ăŁăŚăăăă¤ăłăăĺşăăžăă
é ăŽăŚăŁăşăăăăć§ćč¨ĺŽăŽăăźĺ¤ăăăďźJSăŞăă¸ă§ăŻăă¨ăăŚďźă§ăăčż˝ĺ ăŽăăŠăĄăźăżăźăĺăĺ Ľăăă¨ăăććĄăŻă誰ăăăăăĺŽčŁ ăăŚăżăăăă°ăMochaăŽăžă¨ăăŞĺ°ćĽăŽč§ŁćąşçăŽăăăŤčăăăžăă
ăăä¸čŹçăŞč§ŁćąşçăŤă¤ăăŚăŻ+1ă
ăăăăç§ăč¨ăăăă¨ăăăĺä¸ăŽăăŠăĄăźăżăźă渥ăăă¨ăŻăžă ĺŽčĄĺŻč˝ă§ăăăăăŤćăăăžăă this
ădone
ăłăźăŤăăăŻă¨çľăżĺăăăžăďźăăăăŁăŚă this
ăŻé˘ć°ăŤăŞăăžăďźă 揥ăŤăăăŠăĄăźăżăźăŽć°ăŤé˘äżăŞăămochaăŤpromiseă§ăŠăăăăăĺăăšăăĺŽčĄăăăžăďźĺŽéăŤăŻ2ă¤ăăżă¤ă ă˘ăŚăăŽĺŚçç¨ăŤ1ă¤ăĺŽéăŤăăšăăĺŽčĄăăăăăŤ1ă¤ďźă 揥ăŤăé˘ć°ăŽçľćăpromiseă§ăăăăŠăăă確čŞă§ăăžăă ăăă§ăŞăĺ ´ĺăŻăĺćé˘ć°ăćťăŁăĺžăŤdone
ĺźăłĺşăăŚăăăšăăçľäşăăžăă é˘ć°ăŽçľćă䝣ăăăŤpromiseă§ăăĺ ´ĺăŻăăăă解湺ăăăďźăžăăŻćĺŚăăăďźăŽăĺž
ăĄăžăă ăżă¤ă ă˘ăŚăăçşçăăĺ ´ĺăŻăăăšăăĺć˘ăăžăďźäťĽĺă¨ĺăďźă ăăšăăăŞăă¨ădone
ăĺźăłĺşăăpromiseăčżăĺ ´ĺă ăŠăĄăăŽĺŽäşă解湺ĺăŤĺźăłĺşăăăžăăăăŽĺ ´ĺămochaăŻç´ćăĺž
ăŁăŚăăăăăăžăăŞĺŽäşăˇăźăąăłăšăăăăăăŤăăšăăŤĺ¤ąćăăĺż
čŚăăăăžăă ăžăăŻă解湺ĺžăŤĺŽäşă¨ĺźă°ăăžăăăăŽĺ ´ĺăä˝ăăăŽççąă§ăăšăăéĄĺçăŤĺ¤ąćăăăĺż
čŚăăăăžăăăžăăŻăĺéĄăäťăŽĺççăŞćšćłă§éçĽăăăžăă çłă訳ăăăžăăăăăăăŻĺ¤ăăŽĺš
ĺşăăšăăăźăŻă§ăăăăăăŻă˘ăŤăä˝ăăăăă¨ăăŚăăăŽăăăăăŚă˘ăŤăééăăçăŤă¤ăăŚăŽç§ăŽé¨ĺ¤č
ăŽç解ă§ăă ăăăĺŽčĄĺŻč˝ăŞč§ŁćąşçăŤăŞăăŽă匨ăăĺŻč˝ć§ăŽăăäťăŽčć
Žäşé
ăŻä˝ă§ăăďź
ăăšăăć¸ăéăŤFPăŤčĄăăăăŽăŞăăă˘ăŤăŽăăăç˘ĺ°é˘ć°ăŤć¸Ąăćšćłăčăĺşă䝼ä¸ăŽăă¨ăăăŞăăă°ăŞăăŞăă§ăăăă
ĺćăăă ĺĽăŽč¨çŽă˘ăăŤăŤç§ťčĄăăăă¨ăŤăŻć確ăŞĺ¤ĺăăăăăăăŤjavascriptăŻăčć Žăăšăăă¨ăăăăăăăč¤éăŞă¨ăłăˇăšăă ă§ăă ăă ăăç§ăŽçšĺŽăŽăŚăźăšăąăźăšă§ăŻăăżă¤ă ă˘ăŚăăćă č¨ĺŽăăďźĺşĺŽăŽăăăŠăŤăĺ¤ă§ăŻăŞăăä˝ăăăŽč¨çŽăŤĺşăĽăăŚăăćŁç˘şăŤăăăŞăŠďźăă¨ăăMochaă§FPăăšăăä˝ćăăă¨ăăŤééăăĺŻä¸ăŽĺ ˇä˝çăŞĺéĄă§ăďźăăăžă§ăŽă¨ăăďźĺ°ăŞăă¨ăďźă ăăăŻç´ ć´ăăăă§ăă ďź+1ďź
ăăăŻč¨ăŁăŚăăďźFPă§ăăšăăć¸ăăă¨ăä¸čŹçăŤä˝ăćĺłăăăŽăă¨ăŻĺŻžç §çăŤďźçšăŤă˘ăŤăŤé˘äżăă塎ă迍ăŁăé厳ă¨ăăŚăăŞăăäťăŤä˝ăčŚăŚăăăŽăçĽăăăă§ăă
ăăăŻç§ăč¨ăŁăăă¨ă¨ăŻăťă¨ăăŠĺ寞ă§ăă
誤解ă誤解ăăăŁăĺ ´ĺăŻçłă訳ăăăžăăă ç§ăć¸ăăăăŽăŽĺ¤ăăŤă¤ăăŚăŻăčżäżĄăŤĺşăĽăăŚăćĺłăăă¨ăăăŤĺşäźăŁăăăŠăăăăăăăžăăă ćŽĺżľăŞăă¨ăŤăç§ăăĄăăăăŤĺăćăăŁăĺ ´ĺăăăăăFPă_çčŤ_ă§ăŠăŽăăăŤčŚăăăšăăăŤă¤ăăŚăăŞăçˇĺŻăŞĺćăŤéăăă ăăă¨ćăăžăă ăă ăăĺ°ăŞăă¨ăä¸é¨ăŽăŚăźăśăź/ăŚăźăšăąăźăšă§ăŻăçžĺ¨ĺŠç¨ĺŻč˝ăŞMochaăŽăŞăŞăźăšă§_practice_ăŽĺŽčĄĺŻč˝ăŞĺć¸ăăŠăŽăăăŤčŚăăăăŤă¤ăăŚăŻćčŚăĺăăăŚăăăăă§ăă ă§ăăăăç§ăććĄăăă˘ăăŞăłćŠč˝ăŽä¸ťăŞĺéĄăăăŞăăŽĺ´ăăćŁç˘şăŤä˝ă§ăăăăŻăăăăăăžăăă
ďźé çŞăŤĺźç¨ăăŚčżäżĄăăžăăăăééăăŞăăăăéčŚăŞăăŽăŻĺă§ăŻăŞăĺžă§ăăďź
ăăăăç§ăč¨ăăăă¨ăăăĺä¸ăŽăăŠăĄăźăżăźă渥ăăă¨ăŻăžă ĺŽčĄĺŻč˝ă§ăăăăăŤćăăăžăă ăăădoneăłăźăŤăăăŻă¨çľăżĺăăăžăďźăăăé˘ć°ăŤăŞăăžăďźă 揥ăŤ...ăăăĺŽčĄĺŻč˝ăŞă˝ăŞăĽăźăˇă§ăłăŤăŞăăŽă匨ăăĺŻč˝ć§ăŽăăäťăŽčć Žäşé ăŻä˝ă§ăăďź
ä¸ä˝äşćć§ăç ´ăă¨ăăăĺç´ăŞč¨č¨ăŤĺăćżăăăă¨ăă§ăăžăă
ä¸ä˝äşćć§ăçśćăăĺ ´ĺăăăăăŽăăšăăŻä¸Ąćšă¨ăĺć źăăĺż čŚăăăăăżă¤ă ă˘ăŚăăăĺż čŚăŻăăăžăăă
it("runs immediately", () => {
// call functions and assert whatever
})
it("runs asynchronously", doneWithSomeOtherName => {
setTimeout(() => {
// call functions and assert whatever
doneWithSomeOtherName()
}, 100)
})
ăăă§ăŞăăă¨ă訟ćăăăăăŤăăăă¤ăăŽăľăłăăŤăłăźăăčăĺşăăă¨ăćčżăăžăďźăă ăă䝣ăăăŤăăŽăłăĄăłăăŽćĺžăŤăăććĄăŤçŚçšăĺ˝ăŚăăă¨ăăĺ§ăăăžăďźăăăăăĺŽčĄă§ăăč¨č¨ăŻăŞăă¨ç˘şäżĄăăŚăăžăăăžăăăăŽăăšăăŤĺć źăăăżă¤ă ă˘ăŚăăăŞăăăăŤăăžăă
it("looks just like an asynchronous test with a different name for `done`, but never tells Mocha it's done", context => {
context.configureByMutation("some value")
// call functions and assert whatever
})
ăăăăžăăăăă§ăŽçŞçśĺ¤ç°ăŤćł¨ćăăŚăă ăăă ăăăŤă¤ăăŚăŻäťĽä¸ă§čŠłăă誏ćăăžăă
ăă ăăç§ăŽçšĺŽăŽăŚăźăšăąăźăšă§ăŻăăżă¤ă ă˘ăŚăăćă č¨ĺŽăăďźĺşĺŽăŽăăăŠăŤăĺ¤ă§ăŻăŞăăä˝ăăăŽč¨çŽăŤĺşăĽăăŚăăćŁç˘şăŤăăăŞăŠďźăă¨ăăMochaă§FPăăšăăä˝ćăăă¨ăăŤééăăĺŻä¸ăŽĺ ˇä˝çăŞĺéĄă§ăďźăăăžă§ăŽă¨ăăďźĺ°ăŞăă¨ăďźă ăăăŻç´ ć´ăăăă§ăă
ďź+1ďźďź
ăăăŻč¨ăŁăŚăăďźFPă§ăăšăăć¸ăăă¨ăä¸čŹçăŤä˝ăćĺłăăăŽăă¨ăŻĺŻžç §çăŤďźçšăŤă˘ăŤăŤé˘äżăă塎ă迍ăŁăé厳ă¨ăăŚăăŞăăäťăŤä˝ăčŚăŚăăăŽăçĽăăăă§ăă
ç§ăŻăăăăăŞăçŚçšăçľăŁăŚäźăăŚăăŞăăŁăăŽă§ăŻăŞăăă¨ćăăžă...ăăă§ăăăĺ°ăčŚç´ă§ăăăăŠăăčŚăŚăżăžăăăă ďźăăăŽăăăăăćŽćçăŞăăŽă¨ăăŚĺ¤ăăĺ ´ĺăçłă訳ăăăžăăăăăă§čăćšăĺ¤ăăăă¨ăăŚăăăă¨ăŻčŞăăžăăăăăăŻç˘şăăŤćĺłăăăăăŽă§ăŻăăăžăăăďźMochaăŽăłăźăăăźăšăŻăăŻăŠăšé幤ă¨ă˛ăăżăźăăăłăťăăżăźăšăżă¤ăŤăŽăťă¨ăăŠă§ăă ăăŞăă¸ă§ăŻăćĺăďźăăăŚăMochaăćăŁăŚăăč¤ć°ăŽĺéĄăžăăŻć˝ĺ¨çăŞĺéĄăăăăĺŻĺ¤çść ăŤăŞăă¨ç§ăŻäżĄăăŚăăžăďźăăăăšăăä˝ćăăŚMochaăŤĺŽčĄăăăă ăă§ăăă°ăé常ăŻăăšăăłăźăăŤĺ˝ąéżăăžăăă ă MochaăŽĺ˝äť¤ĺăăĽăźăăŁăłă°ć§ćă使ç¨ăăă¨ăĺĽĺŚăŞăă¨ăă§ăăžăă
it("imperatively sets the timeout multiple times", function(done) {
this.timeout(5000)
var context = this
setTimeout(function() {
context.timeout(1000)
setTimeout(done, 500)
}, 4000)
})
...ăăăăăăăăĺż čŚăŻăăăžăăă é˘ć°ĺ䝼ĺ¤ăŽč¨čŞă§é˘ć°ĺăăă°ăŠăăłă°ăčĄăĺ¤ăăŽčŚç´ ă¨ĺć§ăŤăĺ˝äť¤ĺăäšąç¨ăăŞăă§ăă ăăă
ďźäžĺ¤ăä¸ç´ă§ăăă¨ăăč°čŤăăăăžăăăĺ ĽĺăŤĺşăĽăăŚăšăăźăăăäžĺ¤ăŤă¤ăăŚăŻăăžă 確俥ăćăŚăžăăăăăăŻăĺĽăŽĺ˝˘ĺźăŽĺşĺă¨čŚăŞăăă¨ăă§ăăžăăăăăăŁăŚăă˘ăľăźăˇă§ăłă使ç¨ăăă¨č¨ăäşşăăăžăăăăŽăšăăźăŻćŠč˝ăăžăăăăçžćçšă§ăŻăăăŤĺăçľăă¤ăăăŻăăăžăăăďź
ďźăăă§éčŚăŞé¨ĺ:)ç§ăĺžăăă¨ăăŚăăăŽăŻăăă§ăŤč¤éăŞăłăźăăăźăšăŤč¤éăăčż˝ĺ ăăăăĺžćšäşćć§ăŽăŞăĺ¤ć´ăĺ ăăĺŻč˝ć§ăăăăă¨ă§ăă ăăăăŽăăăăăćŁĺ˝ĺăăĺż čŚăăăăžăă ćŁĺ˝ĺăăăăšăăăăćŠč˝çăŤăăăă§ăăĺ ´ĺăăăăŻčŻăăă¨ă§ăďźă¨ăŤăăç§ăŽćŹă§ăŻďźă ăăšăăăăćŠč˝çăŤăăč¨č¨ăŻăĺéĄă辡ăă䞥ĺ¤ăăăăăăăăžăăďźĺéĄăŽç¨ĺşŚăŤăăŁăŚç°ăŞăăžăďźă ăăăăăăăšăăăăćŠč˝çăŤăăăă¨ăŻăăç˘ĺ°é˘ć°ăćŠč˝çăŤăăăăă¤ăžăăç˘ĺ°é˘ć°ăćŠč˝çăŤăăŞăăă¨ăăćĺłă§ăăąăźăšăĺ¤§ĺš ăŤĺźąăăžăďźčŞĺˇąççžă ăă§ăŻăŞăĺ ´ĺďźă ăăĺŽĺ ¨ăŤďźé˘éŁăă1ăăăăŽçŞçśĺ¤ç°ăäżćăăŞăăăăăšăăăăćŠč˝çăŤăăŽăăăăŽçŞçśĺ¤ç°ăĺăé¤ăăă¨ăŻăĺ°ăŞăă¨ăăăšăăăăćŠč˝çăŤăăăă¨ăăă¤ăłăă§ăăĺ ´ĺăŤăŻăăăăŞăă§ăăăă
ăăăăç§ăŻăăăăăăŽćĽçˇăăăăăťăŠé ăé˘ăăăšăă§ăŻăăăžăăă§ăăă ă˝ăŞăĽăźăˇă§ăłăŤă¤ăăŚăŻă䝼ä¸ăĺç §ăăŚăă ăăă đ¸
ă§ăăăăç§ăććĄăăă˘ăăŞăłćŠč˝ăŽä¸ťăŞĺéĄăăăŞăăŽĺ´ăăćŁç˘şăŤä˝ă§ăăăăŻăăăăăăžăăă
ďźăăă§ăéčŚăŞé¨ĺă§ă:)ĺŽéăŤăŻăăĄă˝ăăĺźăłĺşăăŽäťŁăăăŤtimeout
ăăăŠăĄăźăżăźă¨ăăŚĺăĺăăăăă弽ăă§ăďź ăăăMochaăŽćŽăăŽć§ćăĄă˝ăăăŤä¸čŹĺăăćšćłăćăäťăăă¨ăă§ăăă°ďźăăăăŻăăăăăăăžă-ăăăŚç§ăćŁăăćăĺşăă°ĺćăăšăăŤéŠç¨ăăăăăŽăăăăžăăăăăăç§ăăĄăŻĺăăĄă˝ăăăĺăŤčż˝ĺ ăăăă¨ăă§ăăŞăăŽăŻăŞăă§ăăďź done
ăăăăăŁă使ç¨ăăŚă done
ăäťăăŚć§ćăĺźăłĺşăăă¨ăă§ăăéĺćăăšăăä˝ćă§ăăăăăŤăăžăăăç§ăŻé¸čąăăžăďźăăăă確čŞăăăă¨ćăăžăă ĺ°ăŞăă¨ăăăăăć¨ĺĽ¨ăăăă¨ćăăăăăăžăăăă3çŞçŽăŽăăŠăĄăźăżăźďźăžăăŻăăŽăăăŞăăŽăăăăăit.configured
ăžăăŻit(...).configured(...)
ă渥ăăăă¨ăăŤĺŽčŁ
ăit
ăŤćĄç¨ăăăă¨ăăă§ăăăăăăăžăăit(...).configured(...)
ăă䝼ä¸ăŽăăŠăĄăźăżć°ăŽăˇă§ăăăŹăłăĺż
čŚăŞăĺ ´ĺăŻ...ďź-ăăăŻăć šćŹçăŞçŞçśĺ¤ç°/ĺż
é äşé
ăŤĺăçľăżăç˘ĺ°é˘ć°ăŽăľăăźăăĺĺžăăä¸ä˝äşćć§ăŽăăă˝ăŞăĽăźăˇă§ăłăŤăŞăă¨ćăăžăăćšćłăďźă¨ăŤăăç§ă丝埾ăăŚăăăŽăŻăăŽăăăŞăăŽă§ăďźďźăăăŻć°ăăĺä˝ăŤéŠĺăăăăă§ăă ĺéżçă§this
ăčż˝ăăăăăŽă§ăŻăŞăăç§ăč¨ăăšăă ăŁăăŽăŻăăăŠăĄăźăżé¨ĺăćĄĺźľăăŚăżăăă¨ăăăă¨ă ă¨ćăăžăă
ç§ăŻăăŞăăăăŽăăăŞăă¨ăăăăă¨ăă§ăăăŠăăă§čŞăă ăă¨ăčŞăăžăďź
describe('a slow thing', () => {
// test code...
}).timeout(5000);
ăăăŻăćäžăăăé˘ć°ăŽăăŠăĄăźăżăźăłăłăăŠăŻăăĺ¤ć´ăăžăăă äťăç§ăŻăăŽăăăŞăăŽă¸ăŽĺç §ăčŚă¤ăăăă¨ăă§ăăŞăăŽă§ăĺ¤ĺç§ăŻăăăćłĺăăă ăă§ăă
@ thom-nicăăăŻćŠč˝ăăžăďź ă˘ăŤăŽăăšăŚăŽé˘ć°ăăăŽăłăłăăăšăăčżăăŽă§ăăăăŻçăŤăăŞăŁăŚăăă¨ćăăžă
return this;
ç˘ĺ°é˘ć°ăăŠăźă ăé常ăŽé˘ć°ăŤç˝Žăćăăă¨ăç§ă¨ä¸çˇăŤćŠč˝ăăžă
é˘ć°ďźďź { ..... }
ăăăŤăĄăŻăăŠăźăŻăšă 8ćăŤč°čŤă塝ă辡ăăăĺžăćăăŞăŁăăă¨ăă芍ăłăăžăăç§ăŻé常ăŤĺżăăăĺŽéăŤăŻăťă¨ăăŠăăŽä˝ćĽăĺŽäş/秝čĄăăžăăă
ăăžăăžăŞăŚăźăšăąăźăšăŤă¤ăăŚăŽčŠłç´°ăŞĺçă¨ăăăăăçľăżĺăăăăŽăăăăŤéŁăăăăćčŹăăžăă ăăăŻăç§ăčŞăă ă˘ăŤăăľăăźăăăŞăăă°ăŞăăŞăăăžăăžăŞăťăăă˘ăăăćăç°Ąć˝ăŤç¤şăăăăŽă§ăă ă ăăăăăă§ăăŞăăŽćéăăăăă¨ăă
ćŻăčżăŁăŚăżăă¨ăă˘ăŤăŽăłăłăăăšăďź this
ďźăŤă˘ăŻăťăšăăăă¨ă埡調ăăăăăŤéăăŞăăă¨ăŻćăăă§ăăăăăŽĺ´é˘ăŻćŹĺ˝ăŤäžżĺŠăŞĺžäťăă§ăăă ç§ăĺŽéăŤăăăă¨ăăŚăăăă¨ăăăŠăăťăŠç°ĄĺăŤćł¨ćăĺźăăă¨ăă§ăăăăăăăžăăă§ăăăăăăŻăä¸ćçăŞćĄĺźľćŠč˝ďź when
ďźăăăšădslăŤčż˝ĺ ăăŚă1ĺéăăŽĺçĺăčĄăăă¨ă§ćĽ˝ăăă§ăăžăăăăżă¤ă ă˘ăŚăăŽčŞżć´ďźăăăŤăçšĺŽăŽăšăżă¤ăŤăŽăăšăăŤĺ
ąéăăă¨ăŠăźăćé¤ăăžăăăăăŤă¤ăăŚăŻă䝼ä¸ă§čŞŹćăăžăďźă this
čżăăă¨ăŻăç§ăčż˝ĺ ăăăă¨ćăŁăăă1ă¤ăŽćĽ˝ăăăă¨ă§ăăă丝ăŞă˘ă¤ăă˘ďźăăăăŁăŚă when
ă¨ăăĺĺďźăŻăé常ă¨ăŻç°ăŞăăżă¤ă ă˘ăŚăăĺż
čŚăŞăąăźăšăĺŚçăăăăăŽăăŽă§ăăă
ćăăăŤăăă¤ăłăăăăăłăłăăăšăăŤă˘ăŻăťăšăăăĺ ´ĺăŻăăŠăăăźă§ćăĄä¸ăăăŽă§ăŻăŞăăĺ¤ăăŽäşşăććĄăăŚăăăăăŤă function
ç´ćĽä˝żç¨ă§ăăžăă ăăăŻĺéĄă§ăŻăăăžăăă đăăăä¸čŚĺĽĺŚăŤčŚăăăăăăăŞăăă¨ăŻç§ăŤăŻĺ¤ąăăăŚăăžăăă ăăăăăăŽéăăăŠăŁăăăă¤ăăŽăăšăăăŠăŽăăăŤč¨ĺŽăăŚăăăă示ăăă°ăĺ
¨ä˝ĺăĺŽćăăăă¨ăéĄăŁăŚăăžăă ć確ăŤăăăăăŤăç§ăŻăăă§çšĺŽăŽăšăżă¤ăŤă貊売ăăăă¨ăŻăăŚăăžăăăăăŞăăŤĺăŁăăăŽă使ç¨ăăŚăă ăăă ăăăŻç§ăŽăăăŤĺăăăăŽă§ăă
Ok
ăžăăĺşćŹçăŤ1ă¤ăŽăă¨ăĺŽčĄăăăťăăă˘ăăăăăšăăăŚăăăăĺşçŻĺ˛ăŽĺ
ĽĺăŤĺŻžăăŚăăšăăăŚăăă¨ăă䝎ĺŽăăĺ§ăăžăăăăăăŁăŚăĺşĺăćŁăăăă¨ă確čŞăăăăăŤăä¸éŁăŽăˇăăŞăŞă§ăăŽăă¨ăăăšăăăĺż
čŚăăăăžăă ă ăă ăăé˘éŁăăă˘ăăŞăąăźăˇă§ăłăłăźăăŻă1ă¤ăŽăă¨ăčĄăăăăăĺşç¤ă¨ăŞăăăšăćé ăŻăťă¨ăăŠĺ¸¸ăŤĺăă§ăă ăžăăăăšăăăăŁăä¸ĺż
čŚăŤč¤čŁ˝/ĺ¤ć´ăăăăŞăăŽăŻăć°ăăĺ
ĽĺăŽăăšăăąăźăšăčż˝ĺ ăăé庌ăé
ăăŞăăćçľçăŤăŻăĄăłăăăłăšăä¸ĺçăŤăŞăăăă§ăă
ăăăăŁăŚă䝣ăăăŤăăľăăźăăăăĺŻč˝ć§ăŽăăĺ Ľĺă使ç¨ăăŚă˘ăăŞăąăźăˇă§ăłăłăźăă辡ĺăăăăšăă˘ăŻăˇă§ăłăĺŽčĄăăŚăçľćăă˘ăľăźăăăăŽăŤĺĺăŞä¸čŹçăŞé˘ć°ăč¨čż°ăăžă...ç§ăŽĺ ´ĺăPromiseć˝čąĄĺă使ç¨ăăŚăăăă¨ăčż˝ĺ ăăžăďźççąăŻççĽăăžăďźăăăăăŁăŚăăăŽä¸čŹĺăăăăăšăćé é˘ć°ăŻăĺ˝çśăăăŽpromise.thenăă§ăźăłăčżăĺż čŚăăăăžăă ăăłă¨ăăżăźăŽes6ăŽăăăŞăăŽăăăăžă§ăŽă¨ăăčŻăă
ăăšăăˇăăŞăŞăçťĺ ´ăăžăăăăăšăŚăăăšăćé é˘ć°ăŤăăăŻăăăăăăăšăăąăźăšăŻĺ ĽĺăĺšćçăŤĺŽçžŠăăé˘ć°ăĺźăłĺşăăŚăăžăă
ăăăăŁăŚăăăăăç§ăŻăăŽăăăŞä¸éŁăŽăăšăăä˝ćăăăăšăŚăćŠč˝ăăŚăăăăăŤčŚăăžăă
it('does something', function() {
testProcedureFunction('something','1')
})
ăăăăŠăăźăăŚăăă¨ăăăŽäžăŤăŻăă°ăăăăă¨ăŤăă§ăŤć°äťăăŚăăă§ăăăă return
ăćŹ č˝ăăŚăăătestProcedureFunctionăŻpromiseďźăăăăćĺłăăăăŽďźăŤĺşăĽăăŚć§çŻăăăŚăăăăăćĺžăŽă˘ăľăźăˇă§ăłăćĺăăă夹ćăăăăŤé˘äżăŞăă常ăŤćĺăăžăă ăăăŻăă°ă§ăăă追补ăăăŽăŻé常ăŤĺžŽĺŚăŞĺ ´ĺăăăăžăă 誏ćăŽăăăŤătestProcedureFunctionăŽč¨čż°ćšćłă¨ă˘ăăŞăąăźăˇă§ăłăŽč¨čż°ćšćłăŤăăŁăŚăŻăéĺ§ćăŤĺćăłăźăăăăăăăšăçľäşă˘ăľăźăˇă§ăłăŽäťŁăăăŤççşăăĺ ´ĺă§ăăăăšăăąăźăšă夹ćăăĺŻč˝ć§ăăăăžăăăăšăŚă大ä¸ĺ¤Ťă ă¨ćăă
ăăĄăăăăăšăăŻĺŽéăŤăŻćŹĄăŽăăăŤăŞăăžăă
it('does something', function() {
return testProcedureFunction('something','1')
})
ăăă§ăăťă¨ăăŠăŽĺ ´ĺăăăŽăăšăăŻ1čĄăŤăŞăăă¨ăăăăăžăăă ĺŽéăŤăŻăĺ
Ľĺăăă大ăăŞăżă¤ă ă˘ăŚăăĺż
čŚăŤăŞăăăăŞĺ ´ĺăé¤ăăŚăăăšăŚăŽăąăźăšă1čĄăŤăŞăăžăă ĺ¤ĺ
¸çăŞjsé˘ć°ă¨ç˘ĺ°ăŽéăăŽä¸ăŤăăăă§ĺ˝šçŤă¤ç˘ĺ°é˘ć°ăŽçšĺŽăŽĺ´é˘ăăăăžăăä¸ćŹĺź§ăççĽăăăŚăăĺ ´ĺăĺä¸ăšăăźăăĄăłăăŽç˘ĺ°é˘ć°ăŤăŻćéťăŽćťăĺ¤ăăăăžăă function {...}
ăć¸ă䝣ăăăŤăăăšăă§=> ...
使ç¨ăăĺ ´ĺăç˘ĺ°ă¨ä¸ćŹĺź§ăŽćŹ ĺŚăŤă¤ăăŚăăăăŽăąăźăšăç°ĄĺăŤăšăăŁăłăăăăŽćŹ č˝ăăreturn
ĺŤăăăă¨ăŻă§ăăŞăă¨ăăăŤć¨ć¸Źă§ăăžăă
ăăŽăăă§ăďź
it('does something', () => testProcedureFunction('something','1'))
ăăăăŽăąăźăšăŽ1ă¤ăäťăŽăąăźăšăăăćéăăăăĺ ´ĺăŻăŠăăŞăăžăăďź ăăĄăăăăżă¤ă ă˘ăŚăăŻćŹĄăŽăăăŤč¨ĺŽă§ăăžăă
it('does something slow', function() {
this.timeout(10000)
return testProcedureFunction('somethingSlow','2')
})
ăžăăŻă誰ăăééăăçŻăăŚćĺăŤăăăčĄăăăăăăžăăďźăăĄăăćŠč˝ăăžăăďźďź
it('does something slow', () => {
this.timeout(10000)
return testProcedureFunction('somethingSlow','2')
})
ăăăäťăç§ăăĄăŻĺ§ăăă¨ăăăŤćťăŁăŚăăžăăăłăźăăăźăšăŻçš°ăčżăăăăŤçăăăăżăźăłăćăŁăŚăăžăăăăăŻčĄćšä¸ćăŽăŞăżăźăłăă°ăŽĺ˝ąéżăĺăăăăă§ăďźĺ°ćĽăŽç§ăăžăăŻćŠč˝ăčż˝ĺ ăă揥ăŽäşşăŽăŠăĄăăăŤăăŁăŚ-čŚçšăŻăăăŻç°Ąĺă§ăééăăă¨ăčŚéăăăăĺŻč˝ć§ăăăă追补ăăăŽăéŁăăĺ ´ĺăăăăžăďźă when
é˘ć°ăŻăăă解湺ăăç˘ĺ°ăĺăłä¸č˛ŤăăŚä˝żç¨ă§ăăăăăŤăăžăă
it('does something slow', when(() => testProcedureFunction('somethingSlow','2'), 10000))
ďźćł¨ďźä¸č¨ăŽ.timeout(5000)
ăăăăă§ăźăłăŽććĄăćŠč˝ăăăăă¨ăă§ăăžăăă§ăăă使ç¨ăăĺż
čŚăŽăăă˘ăŤăŽăăźă¸ă§ăłăĺĺ ă§ăăĺŻč˝ć§ăăăăžăăăăčŚăăŚăăžăăăă芌ăďźďź
ďźćł¨2ă when
使ç¨ăŻă this
ăăŠăĄăźăżăźăŽĺˇťăä¸ăăăŞăăŻă使ç¨ăăŚăăŞăăă¨ăŤćł¨ćăăŚăă ăă-ăăăŻĺŽéăŤăŻĺăŞăĺžäťăă§ăăďźă
ăăăăăćŹ č˝ăăŚăăç´ćăŽăŞăżăźăłăŽăă°ăŤăăŠă°ăçŤăŚăăă¨ăă§ăăăŞăłăżăźăăăăžăďźăžăăŻăăăçžĺŽçăŤăŻăăăšăŚăŽé˘ć°ăŤrhsă使ç¨ăăŚreturnăšăăźăăĄăłăă埡ĺśăăžăďźă ăăăăăăăŻĺ˝ćăŽé¸ćč˘ă§ăŻăăăžăăă§ăăăăăăŤăç˘ĺ°ăŽć§ćăçăăŞăăďźä¸ťčŚłç/ĺäşşçăŤďźčŞăżăăăăćä˝ăăăăăŞăăăšăąăźăŤăfunction
ăăé˘ăăŚăăžăăžăăă ă
ă ăăăăŞăăŻăăăćăŁăŚăăžăă
čżăăăĄăŤăžăčżçăăćéăăăăăŠăăăăăăŞăăŽă§ăĺ°ăŞăă¨ăćçă§ć確ă§ăăăăç˘ĺ°ăăă˘ăŤăłăłăăăšăă¸ăŽă˘ăŻăťăšăĺ ¨ä˝ăăăăčŤäşăŽä¸é¨ăăăăă
ćĺžăŤăé˘ć°vs =>ăéˇăé桡䚹ăăŚăăăă¨ăŤć°äťăăăŽă§ăç˘ĺ°ăthis
ă˘ăŻăťăšă§ăăŞăççąăä˝ć°ăŞăčŞăă§ăăäşşăŤăŻăăăăŞăĺ ´ĺăŤĺăăŚăăăŽăŞăłăŻăĺé¤ăăžăă ăăăŻç§ăčŚă¤ăăé˘ć°ă¨ç˘ĺ°ăŽćăć確ăŞčŞŹćă§ăăăăăăăĺŽĺ
¨ăŤčŞäżĄăćăŁăŚä˝żç¨ăăăŽăŤĺĺăŞéăăćçľçăŤç解ăăăŽăŤĺ˝šçŤăĄăžăăă
https://hacks.mozilla.org/2015/06/es6-in-depth-arrow-functions/
@ thom-nic it
ă§ćŠč˝ăăžăăă describe
ă§ăŻćŠč˝ăăžăăă
describe('my test suite', () => {
it('test case 1', () => {
// ...
}).timeout('10s'); // Works on `it`. This test case doesn't timeout
it('test case 2', () => {
// ...
}); // This test case timeouts.
}).timeout('10s'); // Doesn't work on `describe`. Tests are already created when runs to here.
@ thom-nicăé常ăŽé˘ć°ĺ˝˘ĺźă使ç¨ă§ăăžă
describe('my test suite', function() {
this.timeout(n);
...
}
ăăăŤă¤ăăŚä¸ĺšłăč¨ăäşşăŻčŞ°ă§ăç˘ĺ°ăŽćŠč˝ăç解ăăŚăăžăăă
ç˘ĺ°é˘ć°ăŻć°ăăć´žćăŞES6ăŽăăŽă§ăŻăŞăăĺ¤ĺ
¸çăŞfunction () {}
ăŤĺăŁăŚäťŁăăăă¨ăŤăŞăŁăŚăăžăă ç˘ĺ°é˘ć°ăŽĺŻä¸ăŽçŽçăŻă茪ăăthis
ăçśćżăăăă¨ă§ăăăăă§ăăŻăŠăˇăăŻfunction ()
ăŻçŹčŞăŽthis
ăžăă
ăŻăăĺŽĺ
¨ăŞES6ć§ćă使ç¨ăăŚăăĺ ´ĺă§ăăé˘ć°ăŽćŁăăăłăłăăăšăă§this
ă使ç¨ăăĺ ´ĺăŻă function ()
ă使ç¨ăăĺż
čŚăăăăžăă ä˝ăăăăă¨ăăŚăăăăŤĺżăăŚăES6ă˘ăăŞăąăźăˇă§ăłă§function ()
ă¨() =>
严ćšă使ç¨ăăĺż
čŚăăăăžăă
this.timeout()
ăŻit('....', () => { ... })
this.timeout()
ă§ăŻćŠč˝ăăžăăăăłăźăŤăăăŻăŻčŚŞăŽdescribe()
é˘ć°ăăthis
ăçśćżăăŚăăăăă this.timeout()
ăŻćŠč˝ăăžăăăăăŽăŹăăŤă§çăŤăăŞăŁăŚăăžăă
ăŠă ăé˘ć°ă§ăŻăĺźăłĺşăă§ĺŽŁč¨ăăăŤăé˘ć°ăŤĺä¸ăŽĺźć°ăčŞĺçăŤé俥ăăăă¨ăă§ăăžăăăďź
ďźparamďź=> aFunction
... thenďźaFunctionďź
functionďźďź{}㯠'this'ăŤăă¤ăłăă§ăăžăăăďźďź=>㯠'ăăăŻă¤ăłăăăŚăăžă'
ç˘ĺ°é˘ć°ăŻăĺ俥č ăĺźăłĺşăăăăŽă¨ĺăăłăłăăăšăă§äşĺăŤćąşĺŽăăăăthisăăćĺž ăăĺ ´ĺăĺžćĽăŽé˘ć°ă罎ăćăăĺż čŚăăăăžăďźăžăăĺ Ľĺăăăłăźăăć¸ăăăă¨ă§ăĄăŞăăăĺžăăăžăďźă
'this'ăĺźăłĺşăăă¨ă㍠'this'䝼ĺ¤ăŽăăŽăŤăăăĺ ´ĺăé¤ăăŚăfunctionďźďźăŻçľśĺŻžăŤä˝żç¨ăăŞăă§ăă ăăă
@ăăŠăĄăłăł...
ăŠă ăé˘ć°ă§ăŻăĺźăłĺşăă§ĺŽŁč¨ăăăŤăé˘ć°ăŤĺä¸ăŽĺźć°ăčŞĺçăŤé俥ăăăă¨ăă§ăăžăăăďź
ăăŞăăăăăăŠăŽăăăŤčĄ¨çžăăŚăăăŽăă_ćŁç˘şăŤ_ç解ăăŚăăăăŠăăăŻăăăăžăăă
ăé˘ć°ă¸ăŽĺźć°ăŽé俥ăăŤé˘ăăŚăŻă太ăç˘ĺ°ăŻ1ă¤ăŽäžĺ¤ăé¤ăăŚé常ăŽé˘ć°ă¨ĺăăăăŤćŠč˝ăăžăăĺźć°ă1ă¤ăăăŞăĺ ´ĺăŻăćŹĺź§ăççĽă§ăăžăă
() => console.log("hi"); //zero arguments requires empty parenthesis
a => console.log(a); //you can optionally leave the parenthesis off for 1 argument
(a,b) => console.log(`${a} ${b}`); //2..n arguments requires parenthesis
é˘ć°ăĺä¸ăŽĺźă§ăăéăă太ăç˘ĺ°ă使ç¨ăăă¨ăä¸ćŹĺź§ă¨return
ăăźăŻăźăăççĽăăŚĺ¤ă_čżă_ăă¨ăă§ăăžăă
ă ăăăăŞăăćăŁăŚăăă...
setTimeout(function(a,b) { doSomething(); return calculateSomething(a,b); }, 5000);
...ăăăŚăăă太ăç˘ĺ°é˘ć°ăŤĺ¤ćăăăĺ ´ĺăé˘ć°ćŹä˝ăŤč¤ć°ăŽăšăăźăăĄăłăăăăăăăä¸ćŹĺź§ă¨returnăăźăŻăźăăćŻăăă¨ăŻă§ăăžăăă ăăŞăăŻăăŽăăăŤăăžă...
setTimeout((a,b) => { doSomething(); return calculateSomething(a,b); }, 5000);
ăăăăăăăăŞăăĺ§ăăăŽăŞă...
setTimeout(function(a,b) { return calculateSomething(a,b); }, 5000);
...揥ăŤăĺä¸ăŽĺźăčżăă ăă§ä˝żç¨ă§ăăăťăŠĺç´ăŞé˘ć°ăćąăŁăŚăăžă...
setTimeout((a,b) => calculateSomething(a,b), 5000);
ăăăŻăăŁă¨čŞăżăăăăŞăăžăăďź
ç§ăŻcodefoster.com/levelup-arraysă§ăăăŤă¤ăăŚăăĺ°ăć¸ăăă
JavaScriptăŤăŻăOOPăăFPăžă§ăĺłĺŻăŞĺĺŽĺ ¨ć§ăăăăăŻăšă¤ăł/ăăăŻăżă¤ăăłă°ăžă§ăăăžăăžăŞăłăźăăŁăłă°ăšăżă¤ăŤăăăăžăă ăăăŤăăăăăŽăšăżă¤ăŤăŤăŻăăăăéŤĺşŚăŞăăżăźăłăăăăžăďźă¤ăžăăOOPăăŁăłăă§ăŽäžĺć§ćł¨ĺ ĽăFPăăŁăłăă§ăŽăŤăŞăźĺ/ă˘ăăďźă
ăłăźăăŁăłă°ăšăżă¤ăŤăFPăŤčżăă this
ă使ç¨ăăăŚăăăăç˘ĺ°é˘ć°ă使ç¨ăăŚăă¤ăŠăźăăŹăźăăĺć¸ăăŚăăĺ ´ĺă this
ăäżćăăĺż
čŚăăăă¨ăéŤĺşŚăŞăăšăďźăăŠăĄăźăżăźĺăăăăăšăăä˝ćăŞăŠďźăŽăŞăźăăźăăăăĺ˘ăăžăă DSLďźă
çľé¨čąĺŻăŞéçşč ăŞă誰ă§ăăăłăźăăŁăłă°ăšăżă¤ăŤăŤĺăăăŚăăšăăăŹăźă ăŻăźăŻăäşĺăŤăŠăăă§ăăžăăăăăăŻăăŹăźă ăŻăźăŻăăăăăŤä˝żăăăăăŽă§ăŻăŞăăă¨ăćĺłăăžăă ăăăŻăă˘ăăă°ăŹăźăăăăŠă°ă¤ăłăŽćĄç¨ăć°ăăă¨ăłă¸ăă˘ăŽăŞăłăăźăăŁăłă°ăŽăăăŽä˝ĺăŞä˝ćĽăŤă¤ăŞăăăžăă
this
ă使ç¨ăăă䝣ăăăŤé常ăŻăłăłăăăšăăŞăă¸ă§ăŻăă¨ăŞăăăŽăăăŠăĄăźăżă¨ăăŚdescribe
ă it
ăŤć¸Ąă䝣ćżăŽbdd
ă¤ăłăżăźăă§ă¤ăšăŽă˘ă¤ăă˘ă弽ăă§ăă it
ă¨ăăăŻă
ăăăăIIRCăŽĺŽčŁ ăŻăăăťăŠç°Ąĺă§ăŻăăăžăăă ăăăă芌ăżăčŚăăŽăŻăŻăźăŤă ăăă
ăăă桹ĺťăŞĺŻä˝ç¨ăŽĺĺ ăŤăŞăŁăŚăăăă¨ăŻçĽăŁăŚăăžăăădone-or-contextăăŠăĄăźăżăźăăăŽăăăŤĺŚçă§ăăžăăă§ăăăďź
it("runs immediately", () => {
// call functions and assert whatever
})
it("runs asynchronously", doneOrContext => {
setTimeout(() => {
// call functions and assert whatever
doneOrContext();
}, 100)
})
md5-b1fe6f00c87a2916712cf6a4df16e142
it("runs immediately using the parameter as a context", doneOrContext => {
doneOrContext.configureByMutation("some value");
// As well as changing config, also flags to Mocha that this test is treating the
// parameter as a context object and is therefore not async.
// Call functions and assert whatever
})
md5-b1fe6f00c87a2916712cf6a4df16e142
it("runs asynchronously using the parameter as a context", doneOrContext => {
doneOrContext.configureByMutation("some value");
doneOrContext.setAsync(); // Flags to Mocha that even though the parameter has been used as
// a context object, the test is in fact asynchronous.
setTimeout(() => {
// call functions and assert whatever
doneOrContext();
// or doneOrContext.done()
}, 100)
})
䝼ä¸ăŽăšăŻăŞăăă使ç¨ăăžăăăăĺăăżă¤ă ă˘ăŚăčś éă¨ăŠăźăçşçăăžăăă
Myscriptďź
describeďź "getBillingDetail"ăasync functionďźďź{
this.timeoutďź55000ďź;
it.onlyďź "ćĺŽăăăćĺšăŞă¸ă§ăĺă確čŞăăŚăă ăă"ăasyncé˘ć°ďźĺŽäşďź{
this.timeoutďź55000ďź;
var result = await url.getBillingDetailďź '12254785565647858'ďź;
console.logďźresultďź;
assert.equalďźresultătrueďź;
}ďź;
}ďź;
ă¨ăŠăźďź55000msăŽăżă¤ă ă˘ăŚăăčś ăăžăăă éĺćăăšăă¨ăăăŻăŽĺ ´ĺăŻăădoneďźďźăăĺźăłĺşăăăŚăăăă¨ă確čŞăăŚăă ăăă Promiseăčżăĺ ´ĺăŻăăăă解湺ăăăăă¨ă確čŞăăŚăă ăăă
ĺŽäşăăăłăźăŤăăăŻăéĺćé˘ć°ăŤć¸ĄăăŞăă§ăă ăă
ä¸ä˝äşćć§ăŽăăăăăăżă¤ăă˝ăŞăĽăźăˇă§ăłăä˝ćăăžăăă äťăŽă¨ăăăăăăŻĺĽĺăŽă˘ă¸ăĽăźăŤă§ăăăćŠč˝ăŻç°ĄĺăŤéŠĺăŞmocha
ăăźă¸ă§ăăžăă
https://github.com/papercuptech/mocha-lambda
require('mocha-lambda')
// now a global '_tst' can be used where 'this' was before
describe('suite', () => {
beforeEach(() => {
_tst.answer = 42
})
it('provides "this" as "_tst"', function() {
assert(this === _tst)
})
it('works', () => {
assert(_tst.answer === 42)
_tst.skip()
})
})
// if you were previously explicitly importing api (describe, it, etc.) from 'mocha',
// you will have to change to importing from 'mocha-lambda', until (or if) this
// gets merged into mocha proper
import ctx, {describe as d, it as i} from 'mocha-lambda'
d('suite', () => {
// ctx() is a function that returns "this" as appropriate
i('works using ctx()', () => {
ctx().skip()
})
})
import {Context} from 'mocha'
// ctx() can also rename global
ctx('t')
declare var t: Context
d('suite', () => {
// ctx() is a function that returns "this" as appropriate
i('works using renamed global', () => {
t.skip()
})
})
@papercuptechăŞăłăŻă404čŚă¤ăăăžăăă
Woops ..ăŻăăŠă¤ăăźăăŞăă¸ăăŞă§ăăă çžĺ¨ĺ Źéä¸
npm imocha-lambdaăă§ăăžă
@aleung @ linesh-ăˇăłăăŤăăăăăŻďź3485ăŤĺăŁăŚäťŁăăăăžăă
ăăăă¨ăă
ăŞăăăăťăŠĺ¤ăăŽăéćłăăăăăćçľçăŤĺéĄăçşçăăăŽă§ăăăăă ăŞăăăă§ăŻăŞăăŽă§ăăďźďź
var mocha = require('mocha'); mocha.describe('foo', (suite) => { suite.timeout(100); suite.it('must love bar', () => ... ); });
ă°ăăźăăŤăĺéĄăŽăăéćłăăăăžăă...ăăăJavaScriptă ăă§ăă
@ thom-nicăŽĺçăĺç §ăăŚăăŻăŞăźăłă§ăăŞăăŻăĺŽčĄăăžăă
ç§ăŻăăŞăăăăŽăăăŞăă¨ăăăăă¨ăă§ăăăŠăăă§čŞăă ăă¨ăčŞăăžăďź
describe('a slow thing', () => { // test code... }).timeout(5000);
ăăăŻăćäžăăăé˘ć°ăŽăăŠăĄăźăżăźăłăłăăŠăŻăăĺ¤ć´ăăžăăă äťăç§ăŻăăŽăăăŞăăŽă¸ăŽĺç §ăčŚă¤ăăăă¨ăă§ăăŞăăŽă§ăĺ¤ĺç§ăŻăăăćłĺăăă ăă§ăă
@ thom-nică˝ăŞăĽăźăˇă§ăłăŻç§ăŽăăăŤĺăăăăăăă¨ăďź
ćăĺčăŤăŞăăłăĄăłă
ăăăă¨ăă
ăŞăăăăťăŠĺ¤ăăŽăéćłăăăăăćçľçăŤĺéĄăçşçăăăŽă§ăăăăă ăŞăăăă§ăŻăŞăăŽă§ăăďźďź
ă°ăăźăăŤăĺéĄăŽăăéćłăăăăžăă...ăăăJavaScriptă ăă§ăă