【问题标题】:How do you spy on a call back in an ajax call with jasmine?你如何在 jasmine 的 ajax 调用中监视回调?
【发布时间】:2014-01-21 19:24:07
【问题描述】:

我目前正在使用 enyo,并且我在组件上有一个函数,该函数接受回调函数并进行 ajax 调用,然后在成功时调用回调。我似乎无法弄清楚如何监视回调函数。

enyo.kind({
  name: 'Login',
  isLoggedIn: function (callback) {
      $.ajax({
        url: '/checkLogin'
      })
      .done(function (data) {
         /* Some logic here */
         return callback.apply(null, data);  //IF all goes well this should call the spy
      })
      .fail(function(){/*Fail Stuff*/});
  }
  ....
});

对于我的测试:

describe('Valid User', function() {
   var ajaxSpy;
   var loginTest = new Login();
   beforeEach( function () {

      ajaxSpy = spyOn($, 'ajax').andReturn({
         done: function (fn ) {
             fn();
         },
         fail: function (){}
      });
   });

   it("should call the callback", function () {
      var spy = jasmine.createSpy("spy");
      loginTest.isLoggedIn(spy);
      expect(spy).toHaveBeenCalled();
   });
 }

在这种情况下,当它运行时,回调变得未定义,我认为这可能是因为 ajax 间谍拦截了它,但我不确定如何修复它。

【问题讨论】:

    标签: javascript ajax jasmine enyo


    【解决方案1】:

    ajax 调用的作用是返回一个调用promise 的东西。

    您可以在这方面查看各种文章:

    但底线是一些关于如何实现此目的的示例代码:

    spyOn( $, 'ajax' ).andCallFake( function (params) {
    
      params.success({foo: 'bar'});
      
    });
    
    spyOn( $, "ajax" ).andCallFake( function (params) {
        
      params.error({foo: "bar"});
      
    });
    

    【讨论】:

      猜你喜欢
      • 2018-04-20
      • 2014-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-31
      • 2012-08-04
      • 1970-01-01
      相关资源
      最近更新 更多