• 墨玉县发展农村电商破解脱贫难题 2019-07-15
  • 晋中市通报五起违反中央八项规定精神问题 2019-07-14
  • 五月呼声报告: 陕11家单位上黑榜 官方回复房产投诉满意度低 2019-07-14
  • 高明农家乐地图出炉 教你玩出新花样清凉乐翻天 2019-07-13
  • 超出你想象  大胡子“绣郎”斩获刺绣界“奥斯卡”  2019-07-10
  • 澳媒:亚洲人别来了?悉尼再现种族歧视海报 2019-07-03
  • 为丰富百姓餐桌提供更多选择(打开对外开放新局面) 2019-07-03
  • 爬窗户干瞪眼  云南文山一小区惊现倭蜂猴 2019-07-02
  • 以古鉴今,习近平多次提及屈原 2019-07-02
  • 统一标尺严把关口 防止留置权滥用 2019-06-28
  • 四川医疗巡诊走进松潘为在乡优抚对象送健康 2019-06-25
  • 人民网驻乌克兰记者报道集 2019-06-23
  • 十九大代表杨峰:解决市民身边小事 汇集成民生大事 2019-06-23
  • 浙江舟山定海区一国企非党管理人员涉嫌受贿被查 2019-06-22
  • 中共中央组织部“12380”举报网站 2019-06-19
  • Jquery中文网 南粤风采36选7开奖公告 www.77402m.com
    Jquery中文网 >  jQuery  >  jquery 教程  >  正文 [gist]BDD using jasmine jquery

    福建体彩31选7开奖:[gist]BDD using jasmine jquery

    发布时间:2016-09-19   编辑:南粤风采36选7开奖公告 www.77402m.com
    jquery中文网为您提供[gist]BDD using jasmine jquery等资源,欢迎您收藏本站,我们将为您提供最新的[gist]BDD using jasmine jquery资源

    南粤风采36选7开奖公告 www.77402m.com from //oyanglul.us

    jasmine-jquery 来BDD 就是一个bug, 一个大bug

    参加 TWU 时写 jasmine 测试的时候花了大量时间研究为什么不能绑定事件到
    fixture. 这导致 teamate 和我自己都会认为我这个带头引入这么难用的
    jasmine 的人简直是要杀千刀. 但是其实问题不是 jasmine 当然也不是我,
    都是 jasmine-jquery

    不管是 loadfixtures 还是 preload(fixtureUrl[, fixtureUrl, …]) 都无法
    绑定事件到 fixtures

    BDD 不就是想要点哪然后看哪得反应…结果不知道为什么傻傻的就没有反应.

    傻兮兮的官方文档是这样的

    var spyEvent = spyOnEvent('#some_element', 'click')
    $('#some_element').click()
    expect('click').toHaveBeenTriggeredOn('#some_element')
    

    这…不是废话么….这是在测试”测试代码”么?

    真正关心测试的应该是绑定在click事件上的function, 谁管你被tri没
    trigger. 比如我在元素 #anchor_01 上绑定了添加 css class 的事件.那么我
    应该这样测试我的 javascript 代码.

    describe("when fixture contains an <script src='to/your/source'> tag", function () {
      var fixtureUrl = "fixture_with_javascript.html"
    
      it("should load content of fixture file and javascripts and bind events", function () {
        jasmine.getFixtures().load(fixtureUrl)
        $('#anchor_01').click()
        expect($("#anchor_01")).toHaveClass('foo')
      })
    })
    

    但是这样的 test 是会 fail 掉…

    原因在于包含绑定事件的 script 在 specRunner.html 加载时就已经被load了.即
    时你用的时 $() wrapper, 因为 specRunner.html 的 document 在运行你的
    **spec.js 时已经是ready的了

    也就是说这时候并没有loadFixtures, script 中的事件不会绑定到元素上, 除
    非你用的时live…

    what do we do

    之前一个项目也碰到过类似的情况, 当时的 OO 得比较好, 可以在loadFixtures
    之后再 init 一下需要测试的类. 但是那些不OO的代码肿么办

    事实上我认为 fixture 应该是业务逻辑的一个片段, 那么将需要绑定事件到
    fixture 的 script 扔到 fixture 比较 make sense 因为他们本来就是紧耦合.

    因此我的 hot fix 是将需要测试的 js 放到它所依赖的 fixtrue 里面, 之后在
    loadFixtures 时将 script inline 到 fixture 中然后加载到 specRunner 页
    面上.

    diff --git a/lib/jasmine-jquery.js b/lib/jasmine-jquery.js
    index 87d7ef8..30d12db 100644
    --- a/lib/jasmine-jquery.js
    +++ b/lib/jasmine-jquery.js
    @@ -119,17 +119,33 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFT
    WARE.
       jasmine.Fixtures.prototype.loadFixtureIntoCache_ = function (relativeUrl) {
         var self = this
           , url = this.makeFixtureUrl_(relativeUrl)
    +      , htmlText = ''
           , request = $.ajax({
             async: false, // must be synchronous to guarantee that no tests are run
     before fixture is loaded
             cache: false,
             url: url,
             success: function (data, status, $xhr) {
    -          self.fixturesCache_[relativeUrl] = $xhr.responseText
    +          htmlText = $xhr.responseText
             },
             error: function (jqXHR, status, errorThrown) {
               throw new Error('Fixture could not be loaded: ' + url + ' (status: '
    + status + ', message: ' + errorThrown.message + ')')
             }
           })
    +      var scripts = $($.parseHTML(htmlText, true)).find('script') || [];
    +      scripts.each(function(){
    +        $.ajax({
    +            async: false, // must be synchronous to guarantee that no tests are
     run before fixture is loaded
    +            cache: false,
    +            url: $(this).attr('src'),
    +            success: function (data, status, $xhr) {
    +                htmlText += '<script>' + $xhr.responseText + '</script>'
    +            },
    +            error: function (jqXHR, status, errorThrown) {
    +                throw new Error('Script could not be loaded: ' + scriptSrc + '
    (status: ' + status + ', message: ' + errorThrown.message + ')')
    +            }
    +        });
    +      })
    +      self.fixturesCache_[relativeUrl] = htmlText;
       }
    
       jasmine.Fixtures.prototype.makeFixtureUrl_ = function (relativeUrl){
    

    这样用起来会比较简单, 只需要在fixture里面加入 script 即可

    <div id="anchor_01"></div>
    <script src="spec/fixtures/javascripts/jasmine_javascript_c
    lick.js"></script>
    <script src="spec/fixtures/javascripts/jasmine_javascript_hove
    r.js"></script>
    

    不需要修改任何 jasmine 测试代码, 依然是这段代码, 这是它应该就会 绿

    describe("when fixture contains an <script src='to/your/source'> tag", function () {
      var fixtureUrl = "fixture_with_javascript.html"
    
      it("should load content of fixture file and javascripts and bind events", function () {
        jasmine.getFixtures().load(fixtureUrl)
        $('#anchor_01').click()
        expect($("#anchor_01")).toHaveClass('foo')
      })
    })
    

    fin
    我已经 pull request 到这里 但是人家木有一点要 merge 的意思…好吧,反正我是不会用了,
    要是谁被无法绑定事件困扰就不要再浪费时间困扰了, 可以 clone 我的 fork
    吧 亲.

    view raw
    2013-11-27-bdd-using-jasmine-jquery.org
    hosted with ? by GitHub

    您可能感兴趣的文章:
    jQuery Multi Level horizontal CSS Menu
    Ajax Submit
    Jquery ajax传递复杂参数给WebService的实现代码
    jquery $.ajax入门应用一
    Jquery+WebService 校验账号是否已被注册的代码
    ClockPick, a Time Picker
    PopupWindow
    LavaLamp
    jQuery的表格扩展插件 jTable
    jQuery Color Plugin

    [关闭]
  • 墨玉县发展农村电商破解脱贫难题 2019-07-15
  • 晋中市通报五起违反中央八项规定精神问题 2019-07-14
  • 五月呼声报告: 陕11家单位上黑榜 官方回复房产投诉满意度低 2019-07-14
  • 高明农家乐地图出炉 教你玩出新花样清凉乐翻天 2019-07-13
  • 超出你想象  大胡子“绣郎”斩获刺绣界“奥斯卡”  2019-07-10
  • 澳媒:亚洲人别来了?悉尼再现种族歧视海报 2019-07-03
  • 为丰富百姓餐桌提供更多选择(打开对外开放新局面) 2019-07-03
  • 爬窗户干瞪眼  云南文山一小区惊现倭蜂猴 2019-07-02
  • 以古鉴今,习近平多次提及屈原 2019-07-02
  • 统一标尺严把关口 防止留置权滥用 2019-06-28
  • 四川医疗巡诊走进松潘为在乡优抚对象送健康 2019-06-25
  • 人民网驻乌克兰记者报道集 2019-06-23
  • 十九大代表杨峰:解决市民身边小事 汇集成民生大事 2019-06-23
  • 浙江舟山定海区一国企非党管理人员涉嫌受贿被查 2019-06-22
  • 中共中央组织部“12380”举报网站 2019-06-19
  • 你好湛江个人规律最新 重庆幸运农场公式计算 极速快3计划网 北京快3人工计划 公式一尾中特 甘肃快三27号开奖号码 大乐透开奖 黑龙江22选5开奖结果今天晚上 2014河北11选5公布图 羽毛球杀球教学视频 财神爷心水论坛 南充最近福彩中奖新闻 辽宁35选7字谜 大乐透怎样分析走势图 中国福彩网论坛