首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在茉莉中测试ajax的部分实现

如何在茉莉中测试ajax的部分实现
EN

Stack Overflow用户
提问于 2018-12-01 05:59:30
回答 1查看 159关注 0票数 0

我非常喜欢AJAX的这一资源,它的工作原理是测试AJAX参数中的successerror函数。

但是,当我选择不使用$.ajax({ ... success: ... })并选择在外部使用.done()时,我不知道如何进行测试。请帮助修改我的简单规格,谢谢!

代码语言:javascript
运行
复制
function itWorked() {}

function sendRequest(callbacks, configuration) {
  $.ajax({}).done(function(response) {
    itWorked()
  });
}

Spec

代码语言:javascript
运行
复制
fdescribe("Ajax Tests", function() {
  beforeEach(function() {
    spyOn(window, "itWorked")
    deferred = $.Deferred().done(function() { })
    spyOn($, "ajax").and.callFake(deferred)
    sendRequest()
  })
  it("should work", function() {
    expect($.ajax).toHaveBeenCalled() // pass
    expect(window.itWorked).toHaveBeenCalled(); // fail
  });
});
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-03 15:37:22

嗯,问题中的例子可能与运行本地的不同,但是它应该在行spyOn($, "ajax").and.callFake(deferred)中失败,因为callFake期望一个函数,而deferred不是。相反,deferred应该是一个明确的承诺,使用.and.returnValue而不是.and.callFake

下面是一个有用的例子:

代码语言:javascript
运行
复制
  function itWorked() {
    console.log("It worked!!");
  }

  function sendRequest(callbacks, configuration) {
    $.ajax({}).done(function(response) {
      itWorked();
    });
  }

  describe("Ajax Tests", () => {

    beforeEach(function() {
      spyOn(window, "itWorked").and.callThrough();
      deferred = $.Deferred().resolve(); // Call resolve
      spyOn($, "ajax").and.returnValue(deferred); // Use return value
      sendRequest();
    });

    it("should work", function() {
      expect($.ajax).toHaveBeenCalled(); // pass
      expect(window.itWorked).toHaveBeenCalled(); // pass
    });
  });

请注意,我已经添加了console.log("It worked!!");,并使用了.and.callThrough();,只需在控制台中重复检查“它成功了!”被记录下来了。

当调用$.Deferred().resolve()时,可以在.done.then回调中传递一个模拟的响应来处理。有点像.resolve({ success: true })检查这里的一个例子

希望它能帮上忙

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53568192

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档