<cite id="pbjvp"></cite>

        <menuitem id="pbjvp"><em id="pbjvp"></em></menuitem>
        <ins id="pbjvp"></ins>

        <ins id="pbjvp"><video id="pbjvp"><mark id="pbjvp"></mark></video></ins>
        
        

        <output id="pbjvp"><em id="pbjvp"><b id="pbjvp"></b></em></output>

              <i id="pbjvp"><video id="pbjvp"><b id="pbjvp"></b></video></i>
              <mark id="pbjvp"></mark>
              <b id="pbjvp"><em id="pbjvp"><mark id="pbjvp"></mark></em></b>

              Jquery中文网 www.myllop.cn
              Jquery中文网 >  jQuery  >  jquery 教程  >  正文 [gist]BDD using jasmine jquery

              [gist]BDD using jasmine jquery

              发布时间:2016-09-19   编辑:www.myllop.cn
              jquery中文网为您提供[gist]BDD using jasmine jquery等资源,欢迎您收藏本站,我们将为您提供最新的[gist]BDD using jasmine jquery资源

              from http://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

              [关闭]
              246好彩天天免费资枓大全 <二四六03024>| <二四六z资料>| <二四六老地主>| <二四六老地主论坛>| <246天天好彩玄机图>| <246天天好彩票玄机图片>| <246好彩天天免费资枓大全>| <二四六天天好彩彩玄机资枓>| <二四天天正版免费资枓大>| <二四六天天好彩每期文字賧料>| <二四六天天好彩毎期文字资料>| <二四六天天好彩毎期文字图片玄机>| <二四六天天人好彩网手机版>| <二四六天天好彩手机版—每期>| <二四六天天好彩免费网手机板>| <二四六天天好手机版本>| <二四六天天好彩彩玄机资枓>| <246好彩天天免费资枓大全>| <二四六天天好彩彩玄机资枓>| <二四天天正版免费资枓大>| <二四天天正版好彩免费资枓1>| <二四六天天好彩头首页>| <二四六天天网手机版>| <二四六玄机图片天天好彩玄机图>| <图片玄机二四六天天好彩资料大全 www.308k.com>| <二四六天天好彩费网站大全>| <精选二四六天天好彩手机版>| <二四六天天好资料大全168>| <二四六天天好来 资料大全>| <二四六天天好资料大全50期蓝月亮>| <246天天免费彩资料大全>| <二四六天天好彩资枓大全>| <二四天天正版免费资枓大全>| <二四六天天好彩免费全年资枓大全>| <二四六天天免费好彩资料大全>| <二四六天天免费好彩资料图>| <二四六天天免费好彩资料大全168>| <743cc二四六天天好釆免费资料>| <246好彩天天免费资枓大全>| <天下釆彩与你同行资料二四六>| <二四六天天好彩资料246>| <二四六天天玄机资料大全>| <308二四六玄机资料大全二四六天天玄机图资料>| <香港二四六玄机资料>| <3o8k com二四六天天好彩文字资枓>| <246好彩天天免费资枓大全>| <二四六好彩资料大全308kk>| <二四六天天好彩彩免费资料大全>| <743cc二四六天天好釆免费资料>| <734cc期期好彩免费资枓大全>| <二四六好彩正版资料>| <308k二四六天好彩资料大全>| <二四六天天,好彩资料开奖>| <玄机二四六天天彩>| <二四六天天天好彩图片玄机>| <二四六天天好彩玄机图库>| <二四六天天如彩正版免费资料大全>| <二四六天天彩玄机免费资料大全>| <二四六天天好彩每期文资子料大全>| <二四六天天香港好彩资料大全>| <二四六天天好彩资料免费大全送>| <香港二四六天天好彩正版资料大全>| <308k二四六好彩资料大全>| <246天天彩免费资料308k>| <246天天好彩资料app>| <二四六天天好彩app下载>| <500502二四六天天彩>| <天天好彩246app>| <246天天好彩资料app>| <二四六天天好彩一每期文字资料>| <二四六天天好彩图片玄机下载>| <246好彩天天免费资枓大全>| <天下釆彩与你同行资料二四六>| <246免费资料大全天天好彩>| <246免费资料大全开>| <246好彩天天免费资枓大全>| <246天天好·彩免费资料大全>| <246天天好彩正版资>| <246天天好彩免费大全资料308k>| | | <新址246天天好彩>| <新址天天好彩二四六>| <246天天好彩开奖944cc>| <246好彩天天免费资枓大全>| <图玄机246天天好彩资料>| <246天天好彩资料全>| <246天天好彩玄机图片>| <246天天好彩免费944cc>| <246556 民间高手论坛>| <246正版天天好彩免费资枓大全>| <246正板天天好彩免费资枓大全>| <308kcom二四六天天彩>| <246玄机图资料天天好彩>| <246天天好彩免费资料大全308>| <二四六免费资料大全正>| <二四六天空彩资料大全>| <二四六天天好彩兔费咨料大全>| <246zl天天好·彩免费资料大全>| <246zl天天944cc好彩免费资料大全>| <二四六正版免费资料大全743cc>| <二四六天天好彩资料大全首页>| <二四六天天好彩免费资料308k>| <二四六免费资料玄机>| <二四六天天好彩资免费大全资料>| <308k二四六天天好彩i>| <246zl天天好·彩免费资料大全>| <二四六天天好彩网手机版 免费>| <天天好彩246资料308图库>| <246天天免费资料大全开奖结果>| <246天天免费资料大全玄机>| <二四六天天好彩免费资料大全168i>| <二四六天天好彩zl246cc>| <精选好彩二四六天天好彩>| <黄大仙精选二四六天天好彩>| | <蓝月亮精选二四六免费天天好彩>| <二四六天天好彩全年免费玄机料>| <二四六图片玄机资料大全>| <二四六玄机图片花仙子>| <香港二四六玄机资料图>| <二四六天天好采玄机资料大全>| <天天二四六玄机>| <二四六天天好彩免费资枓全免费>| <二四六天天好彩资枓免费>| <玄机图二四六天天好彩免费资料>| <二四六天天彩与你同行开奖>| <246好彩天天免费资枓大全>| <二四六天天手机版玄机图资料大全>| <308kcom二四六天天好彩玄机资料>| <二四六好彩正版资料大全>| <香港二四六天天好彩兔费资>| <308k二四六天天好彩 资料>| <二四六玄机图 彩图102>| <二四六天天彩正版资料>| <香港二四六玄机图>| <香港二四六好彩资料246>| <308kcom二四六玄机资料>| <二四六天天好彩正版文字资料大全>| <246天天好彩免费开奖结果>| <246天天好彩免费开奖资料>| <246天天好彩免费资料正版资料>| <2246天天好彩图片玄机>| <246天天好彩图片机>| <二四六天天网彩手机版>| <246 天天好彩免费资料成语挂牌>| <246天天好彩管家婆资料大全>| <246天天好彩综合资料大全>| <308k二四六天天彩>| <二四六天天彩免费玄机资料>| <新址246天天好彩282cc>| <246天天好彩免费944cc>| | <二四六天天好彩944cc资讯>| <246天天好彩308k每期资料>| <246天天好彩308每期资料>| <二四六好彩免费资料图片玄机>| <新址246正版免费资料大全>| <246天天好彩勉费资料大全246>| <新址246zlcom天天好彩资料>| <新址zl 246天天好彩>| <新址246zl cc天天好彩>| <246天天好彩118图片玄机>| <二四六天天好彩马会开奖结果>| <二四六天天好彩手机版开奖结果>| <二四六天天好彩综合资料大全>| <二四六天天好彩308k con>| <二四六天天好彩308k kom>| <246天天好彩免费资大全>| <新址zl246net天天好彩大全>| <246天天好彩玄机资料手机版>| <246天天好天下天空免费>| <二四六天空釆资料大全>| <二四六兔费天天好彩资料>| <二四六308kcom文字资料>| <246天天好天下彩天空开奖>| <二四六免费资料天下>| <二四六天天好彩308k玄机图>| <二四六天天好彩资料开奖>| <308k二四六天天好彩每期>| <308k二四六天天好彩图片玄机>| <二四六天天好彩246zl免费>| <二四六天天好彩 944cc 彩图>| <蓝月亮精选二四六天天好彩>| <二四六天天好彩资料网手机板>| <二四六天天好彩玄机图手机版>| <二四六论坛图片玄机>| <天天二四六玄机图>| <天天彩246免费资料大全>| <246天天好好彩资料免费大全>| <246天天好好彩资料大全>| <二四六免费大全天天彩308>| <香港二四六论坛308k>| <二四六天天彩正版资料大全>| <二四六论坛玄机资料大全>| <308kcom二四六玄机图片>| <308kcom二四六图片玄机>| <308kcom二四六生活幽默>| <玄机图片二四六好彩网>| <玄机资料二四六好彩资料大全>| <246天天好彩308k每期资料大全>|