gpt4 book ai didi

javascript - 使用 mocha.js 测试 jQuery.get 不起作用,其他 Deferred 也不起作用(RSVP)

转载 作者:太空宇宙 更新时间:2023-11-04 00:50:40 24 4
gpt4 key购买 nike

我正在尝试使用 mocha.js 运行一些 JavaScript 测试。到目前为止,一切都运行得很好,但是我在测试 jQuery 请求或其他 promise /延迟的任何内容时遇到了一个大问题。

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

我尝试了不同的编写方法,并且还切换到“正确的”Promise 库,因为显然 jQuery 会为其实现带来麻烦。

正确的 RSVP.Promises 工作正常,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 来发出请求更好的解决方案,或者我做的事情通常是错误的?测试的目的是测试实际的请求/响应,因此模拟请求也不是这里的选择。

就像我说的,无论是否使用 Promise/Defer jQuery,代码在浏览器中都运行得很好。所以我猜这是测试运行器或其运行的node.js 环境(?)的问题。

最佳答案

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

这很棒,或者您可以使用: https://github.com/visionmedia/superagent 而不是使用 jQuery 发出 HTTP 请求。

我认为这是 NodeJS 中比使用 jQuery 更标准的方式。

关于javascript - 使用 mocha.js 测试 jQuery.get 不起作用,其他 Deferred 也不起作用(RSVP),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32625533/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com