- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 QUnit 和 Mockjax 测试一些 jQuery ajax 代码,并让它为不同的测试返回不同的 JSON,like this :
$(document).ready(function() {
function functionToTest() {
return $.getJSON('/echo/json/', {
json: JSON.stringify({
"won't": "run"
})
});
}
module("first");
test("first test", function() {
stop();
$.mockjax({
url: '/echo/json/',
responseText: JSON.stringify({
hello: 'HEYO!'
})
});
functionToTest().done(function(json) {
ok(true, json.hello);
start();
});
});
test("second test", function() {
stop();
$.mockjax({
url: '/echo/json/',
responseText: JSON.stringify({
hello: 'HELL NO!'
})
});
functionToTest().done(function(json) {
ok(true, json.hello);
start();
});
});
});
不幸的是,它为每个调用返回相同的响应,并且无法保证顺序,因此我想知道如何设置它,以便它与实际请求耦合并出现 with this :
$.mockjax({
url: '/echo/json/',
response: function(settings) {
if (JSON.parse(settings.data.json).order === 1) {
this.responseText = JSON.stringify({
hello: 'HEYO!'
});
} else {
this.responseText = JSON.stringify({
hello: 'HELL NO!'
});
}
}
});
这依赖于发送到服务器的参数,但是没有参数的请求又如何,我仍然需要测试不同的响应?有没有办法使用 QUnit 的安装/拆卸来做到这一点?
最佳答案
看来您需要调用$.mockjaxClear();
在创建另一个模拟处理程序之前。
Mockjax 通过更改 $.ajax 方法来工作。
在 its source code 的底部我们可以看到您正在使用的 $.mockjax 方法是其公开的方法之一,只是将更多处理程序附加到mockHandlers 数组中。
$.mockjax = function(settings) {
var i = mockHandlers.length;
mockHandlers[i] = settings;
return i;
};
在$.ajax替换的源代码中,我们可以看到:
// Iterate over our mock handlers (in registration order) until we find
// one that is willing to intercept the request
for(var k = 0; k < mockHandlers.length; k++) {
您的问题是由于 $.ajax 方法满足 /echo/json/
数组中的第一个处理程序(因此不是最新的)模拟处理程序网址。
这里是my fork of your fiddle ,只需添加 $.mockjaxClear()
线。
更灵活的解决方案:
<your handlerID variable>
) 复制到此备份。在模块的teardown中,使用 $.mockjaxClear( <your handlerID variable>
) 删除模块,然后设置 <your handlerID variable>
到别的事情上。setup
中的处理程序以及各个测试功能。但不要相信我的话。 Check out the fiddle .
这样就灵活多了。您可以更改该一个处理程序,并保留您可能拥有的所有其他处理程序。
它似乎确实容易出错,所以我建议要小心。
关于jquery - 异步 QUnit + Mockjax 测试中相同调用的多个响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12165651/
在 mockjax 中你可以使用一个函数来根据请求的数据类型返回不同的响应,像这样: $.mockjax(function(settings) { if ( settings.dataType
我有一个方法,当被调用时,它会向服务器发出 HTTP 请求,并且不关心之后会发生什么。响应不被解析,并且在发送请求或接收到响应后不改变其状态。 现在我想测试这个方法,因为没有状态变化,我无法通过检查方
使用 Qunit 和 MockJax,我寻求进行两个测试,为了便于理解,在此处进行了简化。以下两个测试之一失败,大概是因为这两个测试并行运行,因此它们不会各自绕过 $.ajax()。 (唯一的区别是每
我正在使用 qUnit 和 mockjax 来尝试处理简单的异步表单提交,但出于某种原因,异步 POST 似乎通过 mockjax 传递。 test 'RuleModal closes the mod
我正在利用 Jonathan Sampson 的 answer对于我的 jquery 繁忙加载器。它可以 100% 工作并检测任何 jquery 发布或类似内容并显示加载程序。 我的问题是,大多数时候
是否可以使用 mockjax 模拟 HTTP 错误代码和其他 header 信息? $.mockjax({ url: '/some/webservice', dataType: 'ht
我是 AngularJS 的新手。 我可以通过使用 $http 服务方法 get/post 调用模拟端点来在 AngularJS 中使用 mockjax 吗?如果没有,$http 是否提供了一种创建端
我正在尝试使用 QUnit 和 Mockjax 测试一些 jQuery ajax 代码,并让它为不同的测试返回不同的 JSON,like this : $(document).ready(functi
我有一个使用 mockjax 的动态模拟设置,它适用于我的大部分 ajax 请求,但是当 dataType 设置为 Script 时失败,并允许请求落入常规 Ajax 处理程序。 // gets mo
我在 Mockjax 文档中看到了这个例子: $.mockjax({ url: "/rest", data: function ( json ) { assert.deepEqual(
我需要模拟很长的响应时间。我的 Moockjax 正在运行——它提供了正确的模拟数据。但是我的 ajax 调用是在我加载页面的那一刻完成的,即使我将 responseTime 设置为 20 秒也是如此
我正在尝试弄清楚如何使用 qunit 和 mockjax 适本地测试这个 javascript 函数 我的 javascript 设置了显示模块模式,我是单元测试的新手,所以这有点让我感到困惑 my.
我正在使用jQuery名为 MockAjax 的库它允许您模拟/测试真实的 AJAX 调用。 在我的应用程序中,我可以使用 AJAX 请求的实时应用程序版本和 MockAjax将拦截 AJAX 请求并
我正在使用 qunit 测试我的前端代码和 mockjax . mockjax's own test code 中的 AJAX 测试结构看起来像这样 ( jsfiddle ): var testURL
我第一次使用 Mockjax 来模拟一个 Restful API,它将返回一系列给定 id 的数据。现在我有一个包含多个项目的 json 文件,我想在 Mockjax 中(或在必要时)有一个函数来
我使用 jquery-mockjax 来模拟我的 AJAX 请求以进行测试,在我将 ember 从 2.3.0 -> 2.10.0 升级后,它不再起作用,因为我的服务正在使用 Ember.$.ajax
我正在尝试通过 jQuery $.post 方法调用 Mockjax“post”端点,如下所示 服务.js $.mockjax({ url: '/api/callfor/data',
有人使用 mockjax 对 webpack 进行 jasmine 单元测试吗?我不断收到 $.mockjax is undefined。有关系 //注意:要将 Mockjax 用作节点模块,您必须为
我有一个基本的 jQuery ajax 调用,我使用 jquery.mockjax.js 来模拟响应: $(document).ready(function() { $("but
我正在尝试将 jquery-mockjax 加载到我的测试套件中并按照 http://www.ember-cli.com/user-guide/#managing-dependencies 上的说明进
我是一名优秀的程序员,十分优秀!