脐带血的捐献

怀孕9个月的时候去产检,护士提到了关于脐带血的自存与捐赠。发现很多父母为了孩子一掷“万”金存储脐带血,但是这样做真的是有意义的么?作为一个准妈妈,为了给即将出生的孩子“有备无患”的人生,查询了国内外的很多资料,在这里给大家一个全面的讲解,帮助广大父母选择对脐带血的处理。

什么是脐带血

脐带血是胎儿娩出、脐带结扎并离断后残留在胎盘和脐带中的血液,通常是废弃不用的。近十几年的研究发现,脐带血中含有可以重建人体造血和免疫系统的造血干细胞,这些最原始的造血干细胞,拥有无限分化的潜力,是建造人体血液及免疫系统的基石,并有分化成为其他组织细胞的潜力。

脐带血的用处

世界范围内,目前脐血已经用于治疗各种类型白血病、再生障碍性贫血、淋巴瘤、多发性骨髓瘤、神经母细胞瘤、粘多糖病、地中海贫血、骨髓发育不良症候群、原发性免疫缺陷病、慢性肉芽肿等80多种疾病。
此外脐带血还具有很高的临床研究价值,医学研究发现,脐带血中的造血干细胞,具有复制、分化成为其他不同种类细胞的能力,包括骨骼、心脏、肌肉及神经细胞等,因此许多医疗研究,朝着脐带血再生医学运用潜力的方向进行,例如:老人失智症、糖尿病、心脏病、肝脏疾病、肌肉萎缩症、帕金森氏症、脊髓神经损伤及中风等。

取脐带血安全么

很多的人都会关心这个问题,取脐带血是否是安全的,会不会影响宝宝或者妈妈 例如 造成感染之类的,具体的采集流程如下图,脐血采集不同于传统的骨髓采集,不需要进行麻醉,无痛、无副作用,是在断脐以后进行的,因此对母亲和孩子没有任何不良影响,属于“废物利用,变废为宝”。以北新妇为例,采集会由具有专业资质的医护人员完成,在婴儿出生后,使用含有抗凝剂的密封式血袋收集脐血。

捐献脐带血为社会奉献一份爱心

既然上面说了脐带血有这么多好处,那么更应该建议广大家长为孩子买这份“保险“,为自己的孩子自存脐带血了,但是,其实自存脐带血而将来孩子出现疾病使用脐带血自体移植治疗不一定是最好的,这要看需要治疗的疾病种类而定。 如果医生是用干细胞来帮助自体修复,那么使用病人自己的细胞是最理想的,不会出现病人的身体排斥自体干细胞的现象。 不过,如果自体已经在制造错误细胞,比方说,如果疾病种类是癌症或者遗传性血液病,那就必须移植其他捐献者的细胞,不能再用自体干细胞了。这是因为,病人的干细胞很可能包含同样的缺陷,而正是这种缺陷引起了癌症或遗传性疾病。如果采用自体移植,无异是将疾病的种子又植回了病人体内。 从以下几个方面看,同样捐献脐带血的意义要比自体存储的意义更大,

  • 小概率:作为国家卫生部门批准的“特殊血站”,北京脐带血库,2002年起开始接收产妇自愿付费、为宝宝和家人存储脐带血。北京脐血库库存容量50万份,目前已存放超过19万份脐血。据北京脐带血库数据显示,目前北京脐带血库已有650份脐带血应用于临床,成功治疗患者610位,其中大部分来自公共库,自体库只有11例。所以,自存脐带血并应用于自身,一定程度上确实属于“概率事件”。
    • 有时限:目前,一份脐带血的入库标准是50毫升。这份脐带血容量偏低,一般只对30公斤的儿童有效。还要根据治疗疾病的种类及脐带血细胞数而定。不过只要细胞数量足够,也可以用于大体重的患者。
    • 有风险:脐带血并不能“包治百病”。一些遗传疾病由于自身基因缺陷所致,可能不适合用自己的脐带血治疗,如一些血液和免疫系统方面的遗传病。这种情况下应该选择公共库脐血。

脐带血是新生儿带给人类的一份“厚礼“,建议请不要轻易将宝宝的脐带血放弃,把它捐赠到公共库,这样可以帮助到更多需要造血干细胞移植的患者,只有公共库的建设强大了才有益于脐带血发挥更大作用,才能真正的造福我们的后代,在孩子出生之际就让他学会助人为乐和奉献的美德,而不是盲目的用金钱堆积他的人生。

前端自动化测试之单元测试(一)—— polymer组件的测试工具

单元测试的工具们

  • 单元测试框架
    • Qunit – jquery的单测工具
    • jasmine – 早期的测试框架
    • mocha – 常用框架 支持BDD和TDD
    • Cucumber – 语义化更好的测试工具
  • 断言
    • chai
  • 集成
    • Karma
    • jenkins
    • travis-ci
  • mock
    • sinon
    • supertest
  • 组件测试框架
    • polymer的单测工具:web-component-tester
    • react的单测工具:Jest

之前的博客对比较基础的测试工具都有所介绍,参考前端自动化测试基础篇,在这篇blog中,我们首先了解一下polymer组件的单元测试工具。
mocha
chai
sinon

why web-component-tester

web-component-tester是polymer组件用于单元测试的框架,主要是用作对于html文件的测试
– 它内部集成了mocha、sinon、sinon-chai、chai,方便使用
– 使用lodash作为工具函数
– async用作异步函数的测试
– test-fixture作为

API方法

基本API

  • WCT.loadSuites可以将
  • suite类似describe将测试进行归类
  • test类似it进行具体的测试
  • assert用于进行断言,断言同chai的assert的断言规则
suite('AwesomeLib', function() {
  test('is awesome', function() {
    assert.isTrue(AwesomeLib.awesome);//TDD模式
  });
});

特殊的方法

  • text-fixture 用来在测试过程中操作template中的dom元素,用法是在
<test-fixture id="simple">
  <template>
    <div></div>
  </template>
</test-fixture>
<script>
  suite('classList', function() {
    var div;
    setup(function() {
      div = fixture('simple');
    })
    test('foo', function() {
      div.classList.add('foo');
      assertSomethingOrOther(div);
    });
  });
</script>

关于template binding异步的测试

异步测试在javascript的世界中可谓最常见,对于polymer组件来说,数据驱动模板刷新很重要,
模板数据的刷新会调用Polymer.dom.flush, 它是个异步的过程,对此 web-components-tester 专门提供
flush函数处理此类异步。

suite('with two selected items', function() {
  // Clean up after ourselves.
  teardown(function(done) {
    s.clearSelection();
    s.multi = false;
    // Wait for observers to resolve before moving on to more tests.
    flush(done);
  });

  test('multi selects by index', function(done) {
    s.multi = true;
    //数据变化
    s.selected = [0, 2];
    flush(function() {
      //模板刷新
      assert.equal(s.selectedIndex, [0, 2]);
      assert(s.children[0].classList.contains('core-selected'));
      assert(!s.children[1].classList.contains('core-selected'));
      assert(s.children[2].classList.contains('core-selected'));
      done();
    });
  });

});

google map component测试实例

  • 代码参考,f2e test
  • 1、安装 web-components-tester: npm install -g web-component-tester
  • 2 建立test文件夹(默认地址)
    • 2.1 index.html
    • 2.2 google-map-marker.html
    • 2.3 marker.js

suite('markers default', function () { var map; setup(function () { map = document.querySelector('#map'); }); test('markers are initialized', function () { var markerEl = Polymer.dom(map).querySelector('google-map-marker'); assert.isUndefined(markerEl.marker); assert.isUndefined(markerEl.map); assert.isNull(markerEl.info); assert.equal(markerEl.latitude, 37.779); assert.equal(markerEl.longitude, -122.3892); }); test('markers are added to map', function () { map.addEventListener('google-map-ready', function () { var mapMarkerEl = Polymer.dom(map).querySelector('google-map-marker'); var firstMarker = map.markers[0]; expect(firstMarker).to.deep.equal(mapMarkerEl); assert.equal(map.markers.length, 3); }); }); test('markers position can be updated', function (done) { map.addEventListener('google-map-ready', function (e) { var markerEl = Polymer.dom(map).querySelector('google-map-marker'); markerEl.latitude = 37.79493; markerEl.longitude = -122.41942; markerEl.zIndex = 1; assert.equal(markerEl.map, map.map, "marker's map is not the google-map's"); //重新渲染 异步过程 Polymer.dom.flush(); async.nextTick(function () { var marker = markerEl.marker; assert.equal(marker.getPosition().lat(), markerEl.latitude); assert.equal(marker.getPosition().lng(), markerEl.longitude); assert.equal(marker.getZIndex(), markerEl.zIndex); done(); }); }); }); });
  • 3 运行测试脚本 wct 即可。

wct运行机制

代码:runner
– 建立webserver,模板参见index.html
– 读取wct.conf.json配置
– 内置selenium server 通过wd.js建立连接打开浏览器进行测试
– 并将结果通过socketIO返回显示在命令行
– 测试框架核心:browser.js, 源码内置chai mocha sinon socket等以及polymer测试的辅助函数

辅助工具

在测试中少不了点击事件的模拟,wct这个工具不具有这个功能,但是可以使用polymer的工具组件iron-test-helpers
它内置了MockInteraction可以实现各个事件的模拟,只需import iron-test-helpers.html 即可。使用方法如下:

test('can be triggered with space', function(done) {
  button.addEventListener('keydown', function() {
    done();
  });
  MockInteractions.pressSpace(button);
});

test('can be clicked', function(done) {
  button.addEventListener('click', function() {
    done();
  });
  MockInteractions.tap(button);
});