使用 setInterval 测试函数时 Mocha 和 Chai 测试失败

2024-03-31

我是 TDD 新手,正在使用 Mocha 和 Chai。我创建了一个测试,当值增加时该测试通过,但是当该增加放在 setInterval 内时,它会失败。这段代码的目的是让某些东西在屏幕上移动。

function startMovingThing(){
    var position = setInterval(function() {
        moveThing(10);
    }, 100);
}

function moveThing(number){
    thing.position += number;
    thingOnScreen.style.left = thing.position + 'px';
}

test:

describe('Thing', function() {

    it('should increase position', function(){
        assert.increases(startMovingThing, thing, 'position');
    });

});

我怎样才能通过这个测试(或者测试应该是什么)?

我不希望 moveThing() 位于间隔之外,因为如果清除间隔并调用该函数,则该物体不应移动。


好的,问题是您正在使用异步的 setInterval,并且您试图断言该值以同步方式更改。

这是测试的修改版本,使用 sinonjs 来模拟时间的流逝。

var assert = require('chai').assert;
var sinon = require('sinon');

var thing = { position: 0 }
var thingOnScreen = { style: { left: '' } };

function startMovingThing(){
    var position = setInterval(function() {
        moveThing(10);
    }, 100);
}

function moveThing(number){
    thing.position += number;
    thingOnScreen.style.left = thing.position + 'px';
}

describe('Thing', function() {

  beforeEach(function() {
    this.clock = sinon.useFakeTimers();
  });

  afterEach(function() {
    this.clock = sinon.restore();
  });

  it('should increase position', function(){
    startMovingThing();
    this.clock.tick(101);
    assert.equal(thing.position, 10);
  });
});

总之,sinonjs 正在取代 setInterval 的全局功能,并且无需等待指定的毫秒即可执行代码。

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

使用 setInterval 测试函数时 Mocha 和 Chai 测试失败 的相关文章

  • 存根方法时出现 InvalidUseOfMatchersException

    我有这个 TestNG 测试方法代码 InjectMocks private FilmeService filmeService new FilmeServiceImpl Mock private FilmeDAO filmeDao Bef
  • 自动调整Google网站嵌入代码的高度(html)

    我正在使用 Google 协作平台嵌入 HTML 代码 将代码粘贴到 从网络嵌入 窗口中 输出的长度是可变的 我希望有一种方法可以动态调整父级的高度iframeGoogle 协作平台用于托管我的 HTML 我知道我可以使用 Google 协
  • 在 JavaScript 中生成 RSA 密钥对

    我最近发现了这个 RSA JavaScript 库 http www ohdave com rsa http www ohdave com rsa 但是 它要求预先生成密钥 这是我的问题 问题 我想在 JavaScript 中生成 RSA
  • 无法在 JavaScript for 循环中读取 null 的属性“长度”

    我正在尝试制作一个像 Stack Overflow 那样的 Markdown 编辑器 如果我实际上没有在文本区域中键入星号和包含短语的 http 我会收到标题中列出的此错误 如果我只输入包含星号的短语 则错误指的是这一行 if linkif
  • 使用 javascript 更改 div 颜色

    div style height 20px width 100 background color 000000 div br
  • Javascript - 在加载所有图像后执行

    看了别人的问题我想 window onload 会回答我的问题 我已经尝试过这个 但它会在页面加载时立即执行代码 而不是在图像加载之后 如果有什么区别的话 图像来自 CDN 并且不是相对的 有人知道解决办法吗 我没有使用 jQuery 想要
  • 如何防止 gulp-notify 破坏 Windows 中的 gulp-watch?

    我正在使用吞咽通知 https www npmjs org package gulp notify插入 这是我如何在 gulpfile js 中实现它的示例 您可以看到我也在使用 gutil 和 livereload 我不知道它们是否发挥任
  • html 表格单元格的条件格式

    是否有现成的解决方案可以对 HTML 表格进行条件格式设置 通过条件格式 我更感兴趣的是根据该列或其他列 在同一个表中 的值 数字 将不同的颜色作为单元格背景 类似于我们在 Excel 条件格式 gt 色阶 gt 红黄绿中的内容 我想在通过
  • window.onbeforeunload 在 Android Chrome 上不会触发 [alt.解决方案?]

    我开发了一个简单的聊天应用程序 我正在使用 window onbeforeunload当有人关闭选项卡 浏览器时 基本上是当用户离开房间时 通知其他用户 这是我的代码 scope onExit function scope chatstat
  • 使用文件 API 将资源加载到 Three.js 中

    我想创建导入 3D 模型以在浏览器中查看的功能 方法是使用File API http www html5rocks com en tutorials file dndfiles Three js 加载器在我托管的文件上运行良好 我的理解是加
  • 使用 JavaScript 生成 PDF 文件

    我正在尝试将 XML 数据从网页转换为 PDF 文件 并且希望能够完全在 JavaScript 中完成此操作 我需要能够绘制文本 图像和简单的形状 我希望能够完全在浏览器中完成此操作 我刚刚写了一个名为jsPDF https github
  • 如何调用 google 的 getBasicProfile() 来仅单击按钮即可登录 google?

    我在我的网站上使用谷歌登录
  • 如何更改自动完成中的结果过滤器?

    我不想进行字面匹配 而是想通过正则表达式选择结果 我可以覆盖自动完成的默认行为来完成此任务还是需要替代结构 有一个内置的方法可以做到这一点 只需提供一个函数source http jqueryui com demos autocomplet
  • JavaScript 测验在提出所有问题之前结束

    我现在正在学习 JavaScript 并且正在创建一个测验 我的测验运行正常 控制台中没有任何错误 但它会跳过问题 有时会在回答所有问题之前结束测验 即使给出正确答案 也会减少时间 我不太确定为什么它会这样做 因为在我看来它的编码是正确的
  • 为什么 Web Worker 性能在 30 秒后急剧下降?

    我正在尝试提高在网络工作人员中执行时脚本的性能 它旨在解析浏览器中的大型文本文件而不会崩溃 一切都运行得很好 但我注意到使用网络工作者时大文件的性能存在严重差异 于是我做了一个简单的实验 我在同一输入上运行脚本两次 第一次运行在页面的主线程
  • 为什么将 x 和 y 设置为 0 时 svg 文本会消失?

    我刚刚开始阅读有关svg我提出了以下问题 我正在创建一个简单的svg with a text里面如下图所示 从我的阅读中我了解到x and y of the text标签声明文本在标签内的位置svg space 为什么当我同时设置x and
  • 获取点击的的DOM路径

    HTML div class lol a class rightArrow href a div 伪代码 rightArrow click function rightArrowParents this dom dom is the pse
  • JavaScript 数组扩展语法的时间复杂度是多少?

    我想知道在 JavaScript 中使用数组扩展的时间复杂度是多少 是线性 O n 还是常数 O 1 下面的语法示例 let lar Math max nums 传播称为 Symbol iterator 有关对象的属性 对于数组 这将迭代数
  • mozilla pdf.js 没有全视图

    我喜欢这个 pdf 查看器https github com mozilla pdf js https github com mozilla pdf js Demo http mozilla github com pdf js web vie
  • 在 HTML5 iOS 7 / iOS 8 中显示十进制键盘

    经过几个小时的搜索后 我只是有一个简单的问题 是否有可能在网络浏览器输入字段中显示小数键盘 input type number 只显示数字 但我需要在左下角使用逗号或点 我尝试过任何事情 pattern step等等 但没有显示十进制键盘

随机推荐

  • TravisCI 中的 NDK、CMake 和 Android

    我正在尝试为使用一些 C 代码的 Android 项目设置 CI 因此 我需要 Travis Android 映像上未预安装的 NDK 我目前正在通过自己拉动 NDK 来实现这一目标 但是我的 CI 盒子抱怨 CMake 许可证不被接受 奇
  • 具有两列的 LISTAGG 函数

    我有一张这样的桌子 报告 user id Department Position Record id 1 Science Professor 1001 1 Maths 1002 1 History Teacher 1003 2 Scienc
  • 几秒钟后更改 ImageView

    我正在尝试实现一个简单的活动 让用户插入密码 我有一个 gridview 其中包含 9 个要使用的图像和 4 个将作为所选图像的图像视图 单击 gridview 上的项目时 相应的图像将填充所选图像 现在的问题是 我希望 4 个图像视图的行
  • 如何在 Laravel 中设置会话超时?

    是否有一种固有的方法可以将会话设置为在特定时间后过期 我当前的设置似乎将在 30 分钟后过期 我想禁用它或至少增加它 但我在 Laravel 中找不到可以设置此设置的任何位置 In app config session php你有 life
  • 从 Rails 3 控制器返回的凌乱的视图

    在我的 Rails 3 应用程序控制器上 我有以下代码 array Location all each x array lt
  • JavaScript 中有类似 C# 区域的东西吗?视觉工作室 2017

    我正在为一些人工作 他们希望将自己的 JavaScript 库组织成不同的类别 CRUD 函数 表单函数等 他们真的很喜欢 C 中区域的实用性 并且在 JavaScript 文件中要求这样做 有什么建议么 我正在使用 Visual Stud
  • 从 php 标头下载的 Mp3 文件不起作用

    你好呀 好的 事情就这样了 我的服务器上有我的 mp3 文件 每个文件都在其自己的文件夹中 该文件夹中有 mp3 和一个包含以下脚本的 php 文件 问题是 当我点击进入该 php 页面时 标头应该会自动下载 mp3 文件 但当它下载时 它
  • 由于意外的编码更改,Visual Studio 2008 项目文件无法加载

    在我们的团队中 我们在 Visual Studio 2008 中有一个数据库项目 该项目由 Team Foundation Server 进行源代码控制 每隔两周左右 一位同事签入后 项目文件将无法加载到其他开发人员的计算机上 错误信息是
  • MVC @import html 关键字

    我正在尝试使用 但 mvc 在 razor 视图中将其视为 net 代码 CS0103 名称 导入 在当前上下文中不存在 我如何解决它 谢谢 双倍 解决这个问题 更多详情请点击这里 http weblogs asp net scottgu
  • Maven groovy 编译失败且未解释原因

    I run mvn clean compile 并得到以下输出 INFO Scanning for projects INFO INFO INFO Building tendiwa core 1 0 SNAPSHOT INFO INFO I
  • Sais.js 对套接字请求的授权

    我正在尝试构建一个基于 sails js 的聊天应用程序 来自特定聊天的消息的 URL 如下所示 api chat id messages 当我使用 XHR 请求此 url 时 它会提供一个会话 cookie 并且 sails js 会构建
  • 使用和不使用“New”关键字定义数组有什么区别? [复制]

    这个问题在这里已经有答案了 看看这两个简单的程序 方案一 public class GenArray extends Applet byte myArray byte M byte o byte d byte e byte 1 方案2 pu
  • 不同的产品风格是否可以有不同的 build.gradle ?

    我正在工作的项目是为基于 Amazon 的设备以及 Android 构建的 几乎 95 的代码库在这两者之间是通用的 因此 我没有将这两个项目作为不同的项目 而是考虑使用产品风味将这两个项目放在一起 请告诉我是否还有其他更好的解决方案 但我
  • 如何在柔性容器中设置间隙(排水沟)?

    我正在尝试创建某种柔性容器的通用组件 该组件由容器及其连续的子组件组成 如果一行中的孩子太多 没有足够空间的孩子会去第二行 它可以使用 Flexbox 轻松实现 但我也希望能够在元素之间设置装订线 一行的第一个和最后一个元素不应分别具有左边
  • 如何避免两个不同的线程从数据库读取相同的行(Hibernate 和 Oracle 10g)

    假设我有两个不同的线程 T1 和 T2 它们同时访问同一个数据库并从同一个表中获取数据 现在 在线程启动时 我需要从表中获取数据并将行存储到集合中 然后我将使用该集合在其他地方执行一些工作 我不希望两个线程能够处理相同的数据 因为这会导致重
  • 如何修复“无法创建 ViewModel 类的实例”?

    我尝试了 MVVM 架构 实现了所有必需的类和方法 在 MainActivity 中创建 ViewModel 类的对象时 出现此错误java lang RuntimeException Cannot create an instance o
  • 使用 AJAX、MVC 实现 OOP PHP?

    I m new to the OOP paradigm and AJAX jQuery but would like to create a basic site employing MVC architecture in PHP with
  • AWS:保存每条 SNS 消息

    保存 记录在 AWS SNS 主题上发布的每条消息的最简单方法是什么 我认为可能有一个神奇的设置可以自动将它们推送到 S3 或数据库 或者可能是自动支持 HTTP 目标的数据库服务 但似乎并非如此 也许需要通过 Lambda 函数来完成 目
  • 使用 JQuery 重定向到第三方页面并预填充表单值

    当单击网页上的链接时 我想重定向到第三方网页 例如谷歌 并使用我的查询预填充搜索窗口并模拟点击 只用jquery就可以吗 您不需要任何 JavaScript 即 当您也想模拟点击时 我想 您想要有一个类似自定义搜索框的东西 然后打开Goog
  • 使用 setInterval 测试函数时 Mocha 和 Chai 测试失败

    我是 TDD 新手 正在使用 Mocha 和 Chai 我创建了一个测试 当值增加时该测试通过 但是当该增加放在 setInterval 内时 它会失败 这段代码的目的是让某些东西在屏幕上移动 function startMovingThi