?????????????????????????????Щ????????????????????????????????????????з???????????????????????????????????????????????????????????
??????????????????????????????????????????????????????????????????????????????????????????????????δ??????
???????????????
????????????????????????????????????????????????????Ч????????????????????????????????е?????????????????????Щ?????????????????????? Bug???????????????????????????????????????????????????
??????????????????TDD????????????????????????? Bug ?????????????????????????
????· ??????????????飬??????????????????????????????????????????
????· ???е?????涼???? QA ??????????????????
????· ?????Щ Bug ???????????????????????????????????????????????????? Bug ????????? 20 ??????????????????????????????
????· ??????????Щ Bug ????????????????????????????????????????????
????· ???????????????????? Bug ???????????????????????????
????????????????? Bug ?????????????????????????????????????? Bug?????仰?????????????????????????????????????TDD???????????????????
???????????????
????????????????????????????????????????????á????????????????????????????????????????
??????????????????????????????????????????????????????????????????????????????????ú?????????????ó?????????????????
????????????????????????????????????????????????????????????????????????????????????
?????????????в????????????κ?????????????
?????????????????Щ?????????????
??????????????????????????????á????????????????????????????????????????????????????????????????????????????????????????????????
???????????ó???????????????????????????????ó?????????????????????????
????· ??????? ????????????????????? —— ????????? API ??
????· ??????? ???????????????????? —— ????????? API?? UI?? ????????????????????I/O???????????
????· ??????? ?????????????????????????????????? —— ??????????
????????e????????????????????????????????????????????????????????????????????У????????????????????????Ρ?
????· ??????? ???????????????????????????????á?
????· ???м??? ???????????????????????????????????????????????á?
????· ?????????? ??????????й????????????????????e???????????????????????????ū??????????
????????????????????????? ???е??
??????????????????????????????????????????????????????????????????Щ?????????????????
????· ???? API ?????????????????????????????????????
????· ???? API ????????????????
????· ???? API ???????????????????????????????????? ???繒??????……??
??????????????????????????????????????????棬???????????????豸???
????API ????????????????????????????????? Http API???????????? Unit ?? API??????? Unit ??????????????????????????????????????????????
????????????????????????
?????????????????????????????????????????????????????顢 ??????…
????????????????ó?????????·????? URL ??·??????????????????????????? URL ?????????????? URL??????????????????????·??????????? URL ?????????????????
?????????????????????????????? post ???????????????????????????????????????????????????
????????????????????????????????????????????????????????????θ?????????? lint ??????????? console ???????е?????

?????????????????????????????????????????????????????????????????
???????????????????????????????????????????? I/O???????????????????????????к?????????????????е?????????????????????????????????ó??????????????????????????С???
??????????????????e???????????
????· ???? API ?????????????????????
????· ???? API ????????????????????? - ??????????????
????· ???? API ??????????????????????????????桹
??????????????桹???
???????????桹?????????????
????1????????????????
????2?????????????
????3????????????
????4?????????????
????5?????????
??????????????????????????????????????????????????????к????????????????????????????????????Щ assertion ?????????????????????????????????? ‘equal’?? ’same’?????? ‘deepEqual’ ?????????????????????????Щ?????????ж?????????????????????????????????á????????
???????????????????????????? Tape ?????????????????
// Ensure that the initial state of the "hello" reducer gets set correctly
import test from 'tape';
import hello from 'store/reducers/hello';
test('...initial'?? assert => {
const message = `should set { mode: 'display'?? subject: 'world' }`;
const expected = {
mode: 'display'??
subject: 'World'
};
const actual = hello();
assert.deepEqual(actual?? expected?? message);
assert.end();
});
// Asynchronous test to ensure that a password hash is created as expected.
import test from 'tape'??
import credential from '../credential';
test('hash'?? function (t) {
// Create a password record
const pw = credential();
// Asynchronously create the password hash
pw.hash('foo'?? function (err?? hash) {
t.error(err?? 'should not throw an error');
t.ok(JSON.parse(hash).hash??
'should be a json string representing the hash.');
t.end();
});
});