javascript - Q.delay 无法与 Q Promise 库和 Jasmine 时钟一起使用?

标签 javascript asynchronous jasmine q

我使用 Q 进行了非常基本的 Jasmine 测试,但它似乎不起作用。我只是使用 Jasmine 模拟时钟并尝试使用 Q.delay,我认为它在幕后使用了 setTimeout。

我进行了一些更复杂的测试,涉及从 Q Promise 的 then 处理程序调用 setTimeout(),这似乎也不起作用,但我认为这个将制作一个更简单的测试用例并发布在 Stack Overflow 上。

这是我非常简单的测试用例:

  it('clock test', function() {
    jasmine.clock().install();
    var foo = null;
    Q.delay('hi', 10000).then(function(arg) {
      console.log('foo');
      foo = arg;
    });
    jasmine.clock().tick(10010);
    expect(foo).toEqual('hi');
    jasmine.clock().uninstall();
  });

(此测试基于类似 SO 问题中找到的测试用例: Jasmine clock tick & Firefox: failing to trigger a Q.delay method )

当我运行测试时,它失败了:Expected null to equal 'hi'。 console.log 甚至从未执行。

为了查看问题是否出在 Q 或其他方面,我尝试在规范中添加一个简单的 setTimeout 调用:

setTimeout(function() {
  console.log("bar");
}, 10000);

这有效 - 在调用 jasmine.clock().tick 后,bar 被打印到控制台。

卸载Jasmine时钟后,正常时钟开始工作,等待10秒后,打印出foo

有人知道发生了什么事吗?

最佳答案

您要求它以同步方式进行异步。不。尝试使用 Jasmine 的异步并放弃使用时钟。

it('clock test', function(done) {
    var foo = null;
    Q.delay('hi', 10000).then(function(arg) {
      console.log('foo');
      foo = arg;
      expect(foo).toEqual('hi');
      done();
    });
  }, 15000);

关于javascript - Q.delay 无法与 Q Promise 库和 Jasmine 时钟一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35181807/

相关文章:

.net - 用于单线程异步 async-await 风格编程的信号量

angularjs - 我们如何测试非范围 Angular Controller 方法?

javascript - 使用 Jasmine 测试触发异步请求的方法

Javascript 代码将 anchor 链接的 href 更改为用户在输入框中键入的内容?

javascript - 在非 IE 浏览器中使用 window.open 打开居中对齐窗口

javascript - 使用波形器的进度条。 js之类的audio标签有

unit-testing - 使用 Jasmine 进行单元测试 Knockout 绑定(bind)处理程序

javascript - 半圆弧滚动javascript

javascript - 从异步函数更新反冲状态

c++ - 在 boost::asio 中启动异步操作和运行 io_service 的正确顺序?