• “我不仅要为村民盖别墅”(中国道路中国梦·逐梦新时代) 2019-05-16
  • 回复@老老保老张工:你才是老不要脸也!知道啥叫计划经济么?你自己的决定上报一下就叫计划经济?还能再老蚕点么? 2019-05-16
  • 买买买!吃吃吃!端午消费火爆,总额超70亿元 2019-05-10
  • 律师行业党外代表人士学习贯彻党的十九大精神专题研讨班在京举办 2019-05-03
  • 河北12位书记100%回复 多数区县“一把手”零回复 2019-04-25
  • 以“上海精神”开辟合作发展新境界 2019-04-25
  • 20年后中国受过高等教育人口达到3.5亿,比美国总人口还多,硕士生将达到2千5百万,博士2百万。这就是20年后中国的实力,这也是人类进步,建议美国平静接受,没必 2019-04-24
  • 城区加大扬尘污染治理力度 所有施工现场必须安装视频监控 2019-04-23
  • 闸口村东滩村铺上村村民私自加盖房屋 请治理! 2019-04-23
  • 回复@老老保老张工:你跟你老婆害羞要不要也上报呢?也许正好会安排任务哟。 2019-04-18
  • 湖州德清:外宾点赞“智慧诉讼” 2019-04-17
  • 第十届海峡影视季颁奖典礼在厦门举行 两岸影视交流走进新时代 2019-04-16
  • 正确看待我国社会主要矛盾转化 2019-04-16
  • 第四届中国与全球化论坛会议议程 2019-04-14
  • 697天!申花官方宣布登巴巴回归 虹口9号再度归来 2019-04-14
  • 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-05-16
  • 回复@老老保老张工:你才是老不要脸也!知道啥叫计划经济么?你自己的决定上报一下就叫计划经济?还能再老蚕点么? 2019-05-16
  • 买买买!吃吃吃!端午消费火爆,总额超70亿元 2019-05-10
  • 律师行业党外代表人士学习贯彻党的十九大精神专题研讨班在京举办 2019-05-03
  • 河北12位书记100%回复 多数区县“一把手”零回复 2019-04-25
  • 以“上海精神”开辟合作发展新境界 2019-04-25
  • 20年后中国受过高等教育人口达到3.5亿,比美国总人口还多,硕士生将达到2千5百万,博士2百万。这就是20年后中国的实力,这也是人类进步,建议美国平静接受,没必 2019-04-24
  • 城区加大扬尘污染治理力度 所有施工现场必须安装视频监控 2019-04-23
  • 闸口村东滩村铺上村村民私自加盖房屋 请治理! 2019-04-23
  • 回复@老老保老张工:你跟你老婆害羞要不要也上报呢?也许正好会安排任务哟。 2019-04-18
  • 湖州德清:外宾点赞“智慧诉讼” 2019-04-17
  • 第十届海峡影视季颁奖典礼在厦门举行 两岸影视交流走进新时代 2019-04-16
  • 正确看待我国社会主要矛盾转化 2019-04-16
  • 第四届中国与全球化论坛会议议程 2019-04-14
  • 697天!申花官方宣布登巴巴回归 虹口9号再度归来 2019-04-14