测试jQyery.get with mocha.js不起作用,其他Deferred (RSVP)也不起作用

Testing jQyery.get with mocha.js does not work, nor do other Deferred (RSVP)

本文关键字:不起作用 Deferred RSVP 其他 with get mocha js 测试 jQyery      更新时间:2023-09-26

我正在尝试使用mocha.js运行一些JavaScript测试。到目前为止,一切都运行得很好,但我有一个大问题,测试任何围绕jQuery请求或其他承诺/延迟。

我的代码在浏览器中工作得非常好,以前大量使用$.Deferred,但使用Mocha我无法让它运行。

我尝试了不同的方法来编写它,并且还切换到一个"合适的"Promise库,因为显然已知jQuery会给它的实现带来麻烦。

正确的回复。承诺工作很好,RSVP.Defer仍然不是,我不能得到任何工作涉及jQuery(如请求)。

我确实发现了一些建议,将jQuery包装到适当的Promises中应该可以完成这项工作,但我找不到任何实际做到这一点的方法。

下面是一个测试用例来显示这个问题:

'use strict';
var RSVP = require('rsvp');
var    $ = require('jquery');
describe('promises', function() {
  it('works with RSVP.Promise', function(done) {
    new RSVP.Promise(function(resolve, reject) {
      resolve();
    }).then(function() {
      done();
    });
  });
  it('works with RSVP.Deferred promise', function(done) {
    RSVP.defer().done(function() {
      done();
    }).resolve();
  });
  it('works with $.Deferred', function(done) {
    $.Deferred().done(function() {
      done();
    }).resolve();
  });
  it('works with $.get (promise syntax)', function(done) {
    $.get('http://google.com', function() {
      done();
    });
  });
  it('works with $.get (defered syntax)', function(done) {
    $.get('http://google.com').done(function() {
      done();
    });
  });
});
运行:

$ mocha --compilers jsx:babel/register

给出如下输出:

promises
    ✓ works with RSVP.Promise
    1) works with RSVP.Deferred promise
    2) works with $.Deferred
    3) works with $.get (promise syntax)
    4) works with $.get (defered syntax)

  1 passing (59ms)
  4 failing
  1) promises works with RSVP.Deferred promise:
     TypeError: undefined is not a function
      at Context.<anonymous> (test/test.js:17:26)
  2) promises works with $.Deferred:
     TypeError: undefined is not a function
      at Context.<anonymous> (test/test.js:23:21)
  3) promises works with $.get (promise syntax):
     TypeError: undefined is not a function
      at Context.<anonymous> (test/test.js:31:7)
  4) promises works with $.get (defered syntax):
     TypeError: undefined is not a function
      at Context.<anonymous> (test/test.js:37:7)

只要不涉及jQuery Promise/Defer,其他测试运行得很好。

是否有一个更好的解决方案,而不是放弃jQuery的请求或我做一些普遍错误的?测试的目的是测试实际的请求/响应,因此模拟请求也不是这里的选项。

就像我说的代码在浏览器中运行得很好,无论使用承诺/延迟jQuery与否。所以我猜这是一个问题与测试运行程序或node.js环境(?)它运行在。

测试HTTP请求可以使用:https://github.com/visionmedia/supertest

非常好,或者您可以使用https://github.com/visionmedia/superagent

代替使用jQuery来发出HTTP请求。

我认为这是一个更标准的方式在nodeJS比使用jQuery