2010-08-05 66 views
2

我已经创建了一个插件,用于打鸭jQuery Ajax函数。我无法在运行Ajax的单元测试1.4.2时,它不会通过这两项测试无法通过所有jQuery 1.4.2 Ajax单元测试与我的插件

一个问题
  1. Ajax和背景事件
  2. jQuery.ajax情境修改

测试一个有一个测试,总是失败:

function callback(msg){ 
    return function(){ 
    equals(this, context, "context is preserved on callback " + msg); 
    }; 
} 

this参考而不是被<div/>标签变为XPC跨源W¯¯说唱歌手。

My Source Code is here:

My unit tests for the plug-in can be run here:

The failing unit tests can be run here:

注意的一点是jQuery的1.4.2阿贾克斯母鹿无法处理的301与Firefox 3.6.8服务器响应。它将返回为0.我修改了我的jQuery库来解决这个问题。

还有一些JSONP停止计时。 BUG #5383

也许一些演示文稿问题和这个插件将为野外做好准备。

任何帮助,将不胜感激。包括设计。提前致谢。

+0

@Ken - 感谢代码格式化 – Gutzofter 2010-08-05 23:16:12

+2

您的单元测试链接进入到'localhost',你为什么要在我的机器上托管它们?!? – 2010-08-05 23:43:34

+0

您的机器!我不需要任何stickin'机器。大声笑! – Gutzofter 2010-08-06 01:33:13

回答

5

问题是当您调用最初传递的successerrorbeforeSendcomplete处理程序时,您在service.monitor方法中丢失了上下文。

采取ajaxMonitor.service.js看看,你需要用一个.call()来代替每个原始的处理程序调用,以保持适当的范围内:

1)在service.monitorSuccess()

origSuccess(data, textStatus, request); 
//should be: 
origSuccess.call(this, data, textStatus, request); 

2)在service.monitorError()

origError(request, status, errorThrown); 
//should be: 
origError.call(this, request, status, errorThrown); 

3)在service.monitorBeforeSend()

var abortEarly = origBeforeSend(request); 
//should be: 
var abortEarly = origBeforeSend.call(this, request); 

4)在service.monitorComplete()

var xhr = origComplete(request, status); 
//should be: 
var xhr = origComplete.call(this, request, status); 

我在这里复制测试设置这样你就可以查看结果:http://ncraver.com/AjaxTest/

注意一些其他测试失败...这些都与我的更改无关,它们是我的网站不运行PHP的结果,所以测试得到了来自这些页面的不正确响应:)

+0

要走的路。该死的我几乎在那里。你可以在我的代码中看到当我调用原始Ajax时。非常好的电话。我感谢你值得每一个赏金点。现在我需要把这个传递给我的嘲弄者。 – Gutzofter 2010-08-09 01:37:21

+0

作为一个附注我想知道你是否可以传递给我关于代码和工具本身的批评。反馈非常重要。也许我应该用SO来获得反馈。它可能是主观的,也许像这样的东西可以进入51区? – Gutzofter 2010-08-09 01:39:07

+0

@Gutzofter - 我不知道什么是合适的网站,对我来说,这些工具看起来很不错,但作为一个免责声明:我不是一个*巨大的TDD家伙(通常缺乏开发周期时间调整/做对,不幸)。我将这个问题上的'jquery-plugins'标签取下来,并用'javascript'代替它,这应该会引起更多的关注,因为TDD的事情总体来说比JavaScript特有的多,而其中一些人可能会能够分享一些额外的想法。当你准备好时,也可以在twitter上发送一个链接给@ @ jquery',这个团队可能会看一下:) – 2010-08-09 10:33:56

相关问题