- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
测试对象中事件处理的最佳方法是什么?我似乎无法弄清楚这一点。
我有一个对象,它设置了一些事件监听器,当它观察到这些事件被触发时,它会更改页面上的一个 dom 对象。当我进行多项测试时,下面示例中的最后一个测试失败,如果我注释掉其他测试就没问题。
我有一个测试套件看起来像
var TitleTest = TestCase('TitleTest');
TitleTest.prototype.defaultTitle = 'title';
TitleTest.prototype.defaultCount = '0';
TitleTest.prototype.setUp = function() {
var titleObj;
this.div = new Element('div');
$$('body').first().insert(this.div);
this.div.insert('<div id="title"><h1><span id="titleCaption">' + this.defaultTitle + '</span><span id="titleCount">' + this.defaultCount + '</span></h1></div>');
titleObj = new Title();
});
TitleTest.prototype.testNewItemsEvent = function() {
var data = {count: 10};
assertEquals('Count should be zero before events are fired', this.defaultCount, $('titleCount').innerHTML);
document.fire('custom:NewItems', data);
assertEquals('New count should be 10', data.count + '', $('titleCount').innerHTML);
});
// ... a few other simple tests like the one above
TitleTest.prototype.testUpdateSpecial = function() {
var data = {caption: 'Special Title', count: 10},
specialObj = {special: {type: 2, value: 5}};
// Emulate a special type of category, that can only be
// added at page load
document.fire('custom:UpdateTitle', data);
assertEquals(data.caption, $('titleCaption').innerHTML);
assertEquals(data.count, $('titleCount').innerHTML);
//Removing the special category should revert the title to its default
document.fire('custom:RemoveSpecial', specialObj);
assertEquals(this.defaultTitle, $('titleCaption').innerHTML);
assertEquals(this.defaultCount, $('titleCount').innerHTML);
// only way to get this added back in during non load is using
// javascript history so it needs to revert to previous state
document.fire('custom:AddSpecial', specialObj);
assertEquals(data.caption, $('titleCaption').innerHTML);
assertEquals(data.count + '', $('titleCount').innerHTML);
});
如果前面的测试运行,最后一对断言将始终失败,但如果我注释掉其他测试,则将通过。我不知道我能做些什么来让它工作。
编辑:这是处理特殊标题的添加/删除的代码
Event.observe(document, 'custom:UpdateTitle', function(event) {
if (event.memo.caption) {
this._updateCaption(event.memo.caption);
}
if (event.memo.count) {
this._updateCount(event.memo.count);
}
}.bind(this));
Event.observe(document, 'custom:RemoveSpecial', function(event) {
if (
event.memo.special.type === 1 ||
event.memo.special.type === 2 ||
(
event.memo.special.type === 3 &&
parseInt(event.memo.special.value, 10) === 8
)
){
this._previousTitle = $('titleCaption').innerHTML;
this._resetTitle();
}
}.bind(this));
Event.observe(document, 'custom:AddSpecial', function(event) {
if (
event.memo.special.type === 1 ||
event.memo.special.type === 2 ||
(
event.memo.special.type === 3 &&
parseInt(event.memo.special.value, 10) === 8
)
){
if (!this._previousTitle.blank()) {
this._updateCaption(this._previousTitle);
}
}
}.bind(this));
最佳答案
尝试在 tearDown 方法中编写一些清理代码,以从 DOM 中分离 titleObj 及其监听器。据我所知,jsTestDriver 在每次测试后都会重置 DOM,但我不确定监听 DOM 事件的对象会发生什么。您可能仍然有一个旧的 titleObj 不能被垃圾收集,因为它附加到 DOM。
除此之外,您测试 DOM 事件的方式看起来不错。触发 DOM 事件并断言代码是否执行了预期的操作...
关于javascript - 在 JsTestDriver 中测试手动触发的事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6586794/
测试函数的名称有没有限制? 当我将下面的代码写成testA()和testB()时,它们都会被执行。 AjaxCreateTest = TestCase("AjaxCreateTest"); Ajax
有谁知道 JsTestdriver 的 setUp 和 tearDown 函数/方法的语法?在他们的网站上,他们声称能够定义它,但我无法正确定义。 谢谢。 最佳答案 我下载代码并搜索“setUp”并发
我一直在评估 JSTestDriver,它似乎运行良好。我想在持续集成环境中使用它,我想知道多个项目是否可以同时针对同一个 JSTestDriver 服务器进行测试。 所以我的配置是我有 1 个 JS
我遇到了一个奇怪的问题,声称 $ 不是函数/未定义。显然,这意味着它认为 JQuery 没有定义,但如果我查看页面的源代码并检查请求,JQuery 肯定会被拉取。 Total 0 tests (Pas
我刚刚开始使用 JsTestDriver,我创建了非常简单的演示代码来看看我是否正确配置了我的环境。然而,大约 40-50% 的情况下,当 Firefox 启动(通过 JsTestDriver)时,我
我正在尝试使用 JSTestDriver 将 Hudson 作为持续集成后端来自动化我的 Javascript 测试。我的目标是让 Hudson 至少生成一份关于测试结果的报告,最理想的结果是在失败的
测试对象中事件处理的最佳方法是什么?我似乎无法弄清楚这一点。 我有一个对象,它设置了一些事件监听器,当它观察到这些事件被触发时,它会更改页面上的一个 dom 对象。当我进行多项测试时,下面示例中的最后
我在 JS 中使用 JsTestDriver 进行单元测试。我的代码的一部分使用确认框来允许用户确认或取消决定。 如何在 JsTestDriver 范围内自动测试此确认框的确认和取消选择 最佳答案 您
我正在从事一个 Javascript 变得越来越复杂的项目,需要将其作为我们自动化构建的一部分进行测试。 现在我得到了如下所示的项目结构: - root |- build.xml |- tools
有没有办法在 headless 状态下使用 jsTestDriver,它加载浏览器但 headless 地加载(您看不到浏览器)或最小化加载浏览器? 最佳答案 您可以将 PhantomJS 与 JST
我正在通过编写一个简单的 JavaScript 游戏来学习谷歌关闭工具。我在弄清楚如何设置 jsTestDriver 以使其与闭包库配合良好时遇到了麻烦。 具体来说:我想使用 goog.require
如何使用 jstestdriver 生成 javascript 测试覆盖率? 我能够使用 jstestdriver 运行 javascript 测试。我想生成一个覆盖率报告来检查我测试过的 javas
目前我正在研究使用 CoffeeScript 和 JsTestDriver 的 TDD,但是我被 JsTestDriver 抛出的 ReferenceError 困住了。 一些信息: 使用 Intel
我继承了一个遗留的 JavaScript 库,简单地编写为如下函数列表: function checkSubtree(targetList, objId) { ... } function c
使用 QUnitAdaptor 来测试我的 QUnit 测试,它实际上通过了一个本应失败的测试: test("very simple test", function() { var somevar =
我有深厚的 C# 背景,目前正在通过使用 Knockout.js 和 JavaScript 学习 ASP.NET MVC。我是一个非常注重 TDD 的人,并且遇到了一些我似乎正在努力解决的障碍。我已经
哇,好乱啊。这是场景。 主干驱动的 JS 应用。 用于 AMD 功能的 RequireJS,初始化如下: 然后在 main.js 中添加以下配置代码: require.config( { p
我已经按照 this Link 在 Netbeans 上使用 JS 测试驱动程序设置了 JavaScript 单元测试.但是,与该教程中的结果不同,断言失败后不再执行测试。我怎样才能改变这种行为? 例
经过大量搜索和相当多的试验,在我看来,所选择的组合工具只是没有它。我很乐意被误会。 嗯,技术栈如标题所说。要扩展, 所有“类”的 Backbone RequireJS 加载和管理 Backbone 实
我编写了多个规范文件,用于对网页上的各个模块进行单元测试。如果我单独运行它们,一次运行一个,它们就可以正常工作。但是,当我尝试按顺序运行所有文件时,只有 spec 文件夹中的第一个文件有效,而所有其他
我是一名优秀的程序员,十分优秀!