如何对调用 getJSON 的 javascript 函数进行单元测试

2024-03-26

我已经在单元测试中苦苦挣扎了两天,但在异步测试方面我无法实现一些目标。我是单元测试的新手,我不明白为什么这不起作用。

我有一个文件 login.js 调用 $.getJSON(url, data, function) 并返回一个带有登录状态的字符串(“成功”或“失败”)。 对 $.getJSON 的调用使用mockjax 来获取数据(它包装了ajax 调用)。

当使用 jQuery 单击事件从测试网页调用时,登录功能工作正常。 但现在我正在尝试使用 Qunit 和 PhantomJS 运行无头测试。

问题似乎在于测试没有等待 $.getJSON 调用来获取结果(即使使用超时)。 有什么线索吗? 这是代码。

login.js

var login = function(user, pass){
    $.getJSON("loginURL", {"user":user, "pass":pass}, function(response){
       if(response.status === "success"){
           //do something
           return "success";
       } 
       else{
           //do something else
           return "fail";
       } 
    });
};

test.js

test("Test login", function(){
    var user = "user1", pass = "pass1";
    var done = assert.async();
    var result = login(user, pass);
    setTimeout(function(){
    assert.equal(result, "success", "expect login succeded");
    done();
    },1000);
});

在测试结果中我得到:

预期:“成功”

结果:未定义


Your login函数应该是异步的,因为它的结果取决于服务器的响应。

因此,让我们像这样重写该函数:

function login(user, pass, done) {
    $.getJSON(..., function (res) {
        done(res.status == 'success')
    })
}

然后你可以像这样测试(假设是摩卡):

describe('...', function () {
    it('login()', function (done) {
        login('user', 'pw', function (isLoggedIn) {
            assert(isLoggedIn)
            done()
        })
    })
})
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何对调用 getJSON 的 javascript 函数进行单元测试 的相关文章

  • 使用本地存储在从另一个表保存的 HTML TABLE 中打印 JSON,以便我在另一个页面上打印我的表

    在我的作业中 我必须使用用户输入中的数据并将数据保存在本地存储中 我必须以水平表格式将这些数据从本地存储打印到其他页面 为此 我编写了用于用户输入并将数据保存在本地存储中的代码 div p p div
  • 如何阻止直接访问我的 JavaScript 文件?

    我使用 Minify 来缩小并缓存所有脚本请求 我只希望我的用户能够访问 JavaScript 文件的缩小版本 缩小位于www example com min我的脚本位于www example com scripts 如何阻止直接访问doc
  • JavaScript 添加布尔值

    console log true true 2 console log typeof true true number console log isNaN true true false 为什么两个布尔类型相加会产生一个数字 我有点理解 如
  • Firebase,只得到新的孩子[重复]

    这个问题在这里已经有答案了 var firebase new Firebase firebaseRef on child added function snapshot 这将接收所有元素 有没有办法在创建新的 Firebase 引用时不接收
  • 如何正确清理来自 AngularJS 控制器的无效输入的表单?

    我有一个 AngularJS 表单 其中包含 除其他字段之外 类型之一url 后者很重要 因为这会强制相应的输入成为有效的 URL 在某些条件下 例如 要关闭具有此类表单的模式对话框 我想以编程方式清除该表单 为此 我实现了方法reset基
  • 使用 Angular 指令禁用文本选择

    我正在学习 JavaScript 和 AngularJS 我想使用 Angular Directive 禁用文本选择 我有该函数的 JavaScript 代码 function clearSelection if document sele
  • Akka.net 和单元测试

    我想使用 Akka net TestKit 编写单元测试 但我有一个问题 我有一个 SubscriptionService 类 它负责将消息传输给选定的参与者 public class SubscriptionService Receive
  • 为什么 window 与 Internet Explorer 中的 window.self 不同?

    关于我如何遇到这个问题有一个复杂的背景故事 但为什么self属性不完全等于窗口本身 在 Safari 和 Firefox 及其朋友中 结果如我所料 gt window window self true gt window window se
  • Number.IsNaN() 比 isNaN() 更糟糕吗

    Soooooo isNaNJavaScript 显然被破坏了 比如 isNaN isNaN isNaN true isNaN false isNaN 0 返回 false 当它们看起来都是 不是数字 在 ECMAScript 6 中 草案包
  • 如何在React Native Android中获取响应头?

    您好 我想在获取 POST 请求后获取响应标头 我尝试调试看看里面有什么response with console log response 我可以从以下位置获取响应机构responseData但我不知道如何获取标题 我想同时获得标题和正文
  • IntersectionObserver是否支持水平滚动观察?

    我制作了几个垂直滚动 IntersectionObserver 模块 但我对水平滚动感兴趣 根将是 div 观察目标将是 img 我想观察当 img 放大但 div 保持视口宽度时的变化 我什至不确定移动 Safari 是否会将缩放后的图片
  • JavaScript 中的 Promise 有什么意义?

    一个承诺是一个 可能现在可用 或将来可用 或永远不可用的值 来源 MDN 假设我有一个想要处理图片的应用程序 图片已加载 例如在算法在后台使用它之后 或某种其他类型的延迟 现在我想检查一下图片是否可以在future 通过使用承诺 而不是回调
  • 如何正确取消引用然后删除 JavaScript 对象?

    我想知道从内存中完全取消引用 JavaScript 对象的正确方法 确保删除时不会在内存中悬空 并且垃圾收集器会删除该对象 当我看这个问题时在 JavaScript 中删除对象 https stackoverflow com questio
  • 如何使用 JavaScript 或 jQuery 克隆 HTML 元素的样式对象?

    我正在尝试克隆元素的样式对象 这应该允许我在更改后重置所述元素的样式 例如 el style left 50px curr style left 50px Modify the elements style The cloned style
  • 如何从浏览器向服务器发送“页面将关闭”消息?

    我想向每个 html 文档添加一个脚本 JavaScript 该脚本向服务器发送两条消息 页面确实打开了 页面将关闭 此消息包含页面打开的时间 打开消息应在文档加载时 或加载完成时 发送 这是简单的部分 The close message
  • 使用 Jade 评估自定义 javascript 方法 (CircularJSON)

    我想通过 Jade 将一个对象解析为客户端 JavaScript 通常这会起作用 script var object JSON parse JSON stringify object but my object is circular ht
  • Cucumber Java 与 Spring Boot 集成 - Spring @Autowired 抛出 NullPointer 异常

    我正在为 Spring boot 应用程序编写 cucumber java 单元测试来测试每个功能 当我与 Spring Boot 集成时 Autowired 类抛出 NullPointer 异常 Spring Boot应用程序类 Spri
  • 使用 Enzyme 测试 `React.createRef` api

    我想测试下面的类 它使用React createRef api 不过 快速搜索并没有发现任何这样做的例子 有人成功过吗 我该如何嘲笑裁判 理想情况下我想使用shallow class Main extends React Component
  • react-native - 图像需要来自 JSON 的本地路径

    你好社区 我正在react native中开发一个测试应用程序 并尝试从本地存储位置获取图像 我实际在做什么 我将图像直接链接源提供给 var 并在渲染函数中调用此方法 react 0 14 8 react native 0 23 1 np
  • 滚动顶部不符合预期

    Note 由于上次忘记奖励而重新开放赏金 A Woff 大师已经给出答案 我想在用户展开某一行时到达该行 这样当最后一个可见行展开时 用户不必向下滚动即可查看内容 I used example tbody on click td green

随机推荐

  • 比较两个通用列表

    你好 我如何比较两个Lists 第一种类型ICollections
  • 从功能区按钮触发报告

    我有几个自定义报告 我希望能够向功能区添加触发它们的按钮 是否可以 如果是这样 任何例子都会很棒 提前致谢 要从功能区按钮运行报告 您需要创建一个 js 文件 其中包含将从按钮调用的函数 你需要 4 样东西 rdlName rdl 文件名
  • OS X 上的 GitHub 客户端提交失败(“无法添加文件...)

    我正在尝试从 Mac OS X Mavericks 计算机上的 GitHub 客户端提交对代码所做的更改 像往常一样 我向我的项目添加了一个新包 这是一个 Laravel 项目 我添加了 Rocketeer 包 我还做了一些配置更改 我收到
  • 如何相对于另一个轴定位图中的轴?

    在 MATLAB 中布置图窗时 输入axis equal确保无论发生什么figure尺寸 即axes永远是正方形 我当前的问题是我想向该图中添加第二个轴 通常 这没有问题 我只想输入axes x1 y1 x2 y2 并且将添加一个新的正方形
  • 在多个 .env 文件之间切换,例如 .env.development 和 node.js

    我想为每种模式 开发 生产等 使用单独的 env 文件 在处理我的 vue js 项目时 我可以使用类似的文件 env development or env production为同一环境键获取不同的值 例如 在 env developme
  • 附加元素后 CSS 过渡不起作用

    我遇到了 CSS 转换问题 在尝试其他操作之前 我想了解问题所在 一个容器中有 3 个盒子和一个 下一步 按钮 目标是让下一个框顶部出现在顶部 并在按下 下一个 按钮时淡入 通过将框附加到容器来将其定位在顶部 以便将其添加为最后一个元素 从
  • 如何使用ClearCase注释子命令?

    我试图找出如何获取代码历史记录报告 在其中获取每个代码行的文件版本 我不需要为每个代码行获取多行 只有一个 annotate 子命令有很多参数 我找不到适合该目的的参数 你知道如何得到它吗 非常感谢 每个代码行的文件版本 这几乎看起来像最后
  • 对于非 OK 响应,使用 IHttpActionResult 返回内容

    对于从 Web API 2 控制器返回 如果响应正常 状态 200 我可以返回响应内容 如下所示 public IHttpActionResult Get string myResult return Ok myResult 如果可能的话
  • Oracle 错误:池连接请求超时

    我将 Oracle12c 与用 C 编写的应用程序一起使用 并使用 Oracle ManagedDataAccess dll 来处理数据库连接 我们的产品在运行多年后偶尔会抛出此异常 Oracle ManagedDataAccess Cli
  • 如何在C++中通过位运算找到素数?

    如何在C 中通过位运算找到素数 我认为做到这一点的方法是不要像我们通常那样将位集视为其数字表示 而是将其视为数字列表 所以位集 1111 代表数字 1 2 3 和 4 现在 如果我们说 1 代表素数 0 代表非素数 我们可以如下制作一个筛子
  • 如何解码非关键ASN1数据?

    是否可以使用 crypto 库来解码字节数组中的任意 ASN1 数据 其中有几个序列和整数 ash h 包含所有以 BufferedTransformation 作为输入的方法 但该类是不同密码和哈希的接口 这似乎与我的简单情况根本无关 我
  • 升级到 Angular 9 后,无法在类型文件中找到变量

    我有一个对外部日志记录组件的引用 在 js 文件中引用 我已在类型文件中定义了该组件 打字 d ts declare var LogglyTracker 我已将我的角度应用程序从版本 8 升级到版本 9 现在当我运行时ng build 我收
  • Django 模板名称冲突[重复]

    这个问题在这里已经有答案了 可能的重复 Django 视图 首先从调用应用程序的目录加载模板 https stackoverflow com questions 3092865 django view load template from
  • R 传单缩放控制选项

    我正在使用传单在 R 中构建地图工具 我想将缩放限制在某个区域 但是setMaxBounds功能似乎没有任何效果 library dplyr library leaflet library tigris ohio map lt leafle
  • 如何在 MongoDB 中组织多对多关系

    我有两个表 集合 用户和组 用户可以是任意数量的组的成员 并且用户也可以是任意数量的组的所有者 在关系数据库中 我可能有第三个表 名为 UserGroups 其中包含 UserID 列 GroupID 列和 IsOwner 列 我正在使用
  • 如何编写一个接受借用或拥有元素的“Vec”的函数?

    在 Rust 中 如何将拥有的对象向量传递给需要借用对象向量的函数 我是创建新向量的唯一选择吗 对于函数签名的最佳实践是什么 在该函数中我关心结构体所包含的泛型的类型 但不关心它是否被借用 示例情况 fn using vec of borr
  • MySQL 事务日志

    我正在开发一个项目 要求我们在 DBMS MySQL 中使用 事务日志 我们已经改用 InnoDB 以便使用事务来满足另一个需求 我想了解什么是交易日志 我已经搜索了一天多了 包括阅读 MySQL 文档 也许我只是没有寻找正确的关键词 我不
  • 在 python 中评估后缀?

    我想编写一个函数来计算作为列表传递的后缀表达式 到目前为止我已经得到 def evalPostfix text s Stack for symbol in text if symbol in 0123456789 s push int sy
  • 设备无法识别 USB 调试上的 AVD 设备

    我的公司推出了由中国公司制造的新Android学习选项卡 我在此选项卡上测试我的应用程序时遇到问题 我可以使用驱动程序升级选项卡的操作系统 但我无法将设备用作 AVD 我从开发者选项中打开了 USB 调试 升级操作系统的驱动程序和将设备用作
  • 如何对调用 getJSON 的 javascript 函数进行单元测试

    我已经在单元测试中苦苦挣扎了两天 但在异步测试方面我无法实现一些目标 我是单元测试的新手 我不明白为什么这不起作用 我有一个文件 login js 调用 getJSON url data function 并返回一个带有登录状态的字符串 成