我根据此链接在Netbeans上使用JS Test Driver设置了Javascript单元测试.但是,与该教程中的结果不同,断言失败后不再执行任何测试.我该如何改变这种行为?
该test.js文件中:
AssertionsTestCase = TestCase("AssertionsTestCase");
AssertionsTestCase.prototype.testAlwaysPass = function(){
assertEquals(1, 1);
assertEquals(2, 2);
};
AssertionsTestCase.prototype.testAlwaysFail1 = function(){
assertEquals(1, 2);
};
AssertionsTestCase.prototype.testAlwaysFail2 = function(){
assertEquals(3, 4);
};
Run Code Online (Sandbox Code Playgroud)
该jsTestDriver.conf文件中:
server: http://localhost:42442
load:
- test/lib/jasmine/jasmine.js
- test/lib/jasmine-jstd-adapter/JasmineAdapter.js
- test/unit/*.js
Run Code Online (Sandbox Code Playgroud)
我可以通过命令行运行所有测试.(在Windows PowerShell上).运行如下,测试在失败后不会停止运行:
java -jar $ env:JSTD\JsTestDriver-1.3.5.jar --tests all --config jsTestDriver.conf
该jsTestDriver.conf文件中:
server: http://localhost:4244
load:
- test/lib/jasmine/jasmine.js
- test/lib/jasmine-jstd-adapter/JasmineAdapter.js
- test/unit/*.js
Run Code Online (Sandbox Code Playgroud)
所有三个测试都在运行.
我正在拼凑一个jsTestDriver/Jasmine环境来测试我们的前端代码,我看到很多对Sinon.js的引用,用于独立(或插入)间谍.有人能描述一下Sinon.js给Jasmine不用于测试用户界面的表吗?
我想将JSTestDriver与jenkins-CI集成.问题是构建服务器没有显示.有没有办法无头地运行浏览器?
谢谢
我正在尝试使用jstestdriver在Windows中的ant构建中生成一些单元测试.我计划通过使用<java> ant任务从ant目标运行jstestdriver来实现此目的.
到目前为止,对于我的ant构建文件,我有以下内容:
<target name="jstestdriver" description="Runs the js unit tests">
Run Code Online (Sandbox Code Playgroud)
...
Run Code Online (Sandbox Code Playgroud)
现在在<java>标签(上面的"......")里面我尝试添加以下内容:
<arg value="--config" />
<arg value="../../jstestdriver.conf" />
<arg value="--tests" />
<arg value="${whichTests}" />
<arg value="--testOutput" />
<arg value="${reports.dir}" />
Run Code Online (Sandbox Code Playgroud)
当我运行jstestdriver目标时,控制台上不显示任何消息,并且在它们要生成的目录中没有junit输出文件.
我也试过下面的代码片段,这似乎表明jar正在执行:
<arg value="--config ..\..\jstestdriver.conf" />
<arg value="--tests ${whichTests}" />
<arg value="--testOutput ${reports.dir}" />
Run Code Online (Sandbox Code Playgroud)
但它只是显示一条错误消息:
"--config ..\..\jstestdriver.conf" is not a valid option
Run Code Online (Sandbox Code Playgroud)
...并另外显示jstestdriver jar的选项列表.
我不确定我做错了什么......
我们使用Jenkins将.NET Web应用程序与NAnt/NUnit持续集成以进行.NET测试.Jenkins配置了9个从站(所有这些都是Windows Server 2003),它们运行许多构建及其自动化测试.
我们正在尝试设置js-test-driver来运行我们的JavaScript单元测试,而下面的NAnt任务在开发人员工作站本地运行良好.Internet Explorer是我们唯一想要测试的浏览器,因为它是我们所有Web应用程序的唯一目标浏览器.
<target name="jsTests" >
<echo message="Running JavaScript tests..." />
<exec program="java.exe">
<arg line="-jar '${jstestdriver.dir}\JsTestDriver.jar'" />
<arg line="--config '${ui.webtests.dir}\JsTestDriver.conf'" />
<arg line="--port 9876"/>
<arg line="--browser 'C:\program files\internet explorer\iexplore.exe'"/>
<arg line="--verbose"/>
<arg line="--reset"/>
<arg line="--tests all"/>
<arg line="--testOutput '${results.jstestdriver.dir}'"/>
</exec>
</target>
Run Code Online (Sandbox Code Playgroud)
我们在Jenkins遇到同样的问题,可能是因为:
该GettingStarted页面JS测试驱动器维基说,我们可以在不同的机器比在JS测试驱动程序服务器运行上运行的浏览器:
在运行任何测试之前,您需要启动测试服务器并捕获至少一个从属浏览器.服务器不必驻留在测试运行器所在的机器上,并且浏览器本身也可以位于不同的机器上.
continuous-integration hudson windows-server-2003 js-test-driver jenkins
我有以下代码:
function TestStats($xhr) {
$xhr(
'GET',
'/test-dashboard/get-projects.json',
angular.bind(this, function(code, response) {
this.projects = response.projects;
this.projects.splice(0, 0, undefined);
}));
this.$watch('project', angular.bind(this, function() {
this.testClassStats = undefined;
if (this.project) {
$xhr(
'GET',
'/test-dashboard/get-test-stats.json?project=' + this.project,
angular.bind(this, function(code, response) {
this.testClassStats = response.testClassStats;
}));
}
}));
};
TestStats.prototype.greet = function(name) {
return "Hello " + name + "!";
};
TestStats.$inject = ['$xhr'];
Run Code Online (Sandbox Code Playgroud)
以及以下测试:
TestDashboardUnitTest = TestCase("TestDashboardUnitTest");
TestDashboardUnitTest.prototype.testAoeu = function() {
var xhrStub = function(method, url, callback) {
};
var testStats = new TestStats(xhrStub); …Run Code Online (Sandbox Code Playgroud) 哇,真是一团糟.这就是场景.
RequireJS for AMD功能,初始化如下:
<script data-main="js/main" src="js/require.js" type="text/javascript"></script>
Run Code Online (Sandbox Code Playgroud)
然后在main.js里面输入以下配置代码:
require.config(
{
paths:
{
... : ...
}
});
Run Code Online (Sandbox Code Playgroud)
每个Backbone View/Model/Router都是一个"define(...)"模块,并且"require("theOneRouter",...)"在main.js中被调用一次.
r.js用作Uglify/Closure的优化器.一个'编译'的main.js是在./release子文件夹中创建的,我在.net框架中动态选择.
花了很长时间才能让Backbone + Require.JS工作,但现在效果很好!
然后在上面拍打Jasmine也需要一些定制工作,但它工作得很好.我必须从我的SpecRunner.html加载require.js,使用require的define(...)调用将每个测试模块定义为AMD,并且通过调用require的require(...)调用一次实例化并运行Jasmine在SpecRunner.html中:
require(
[
//"test/specs/testSpec1",
"test/specs/views"
],
function ()
{
jasmine.getEnv().updateInterval = 1000;
var reporter = new jasmine.TrivialReporter();
jasmine.getEnv().addReporter(reporter);
....
....
});
Run Code Online (Sandbox Code Playgroud)
这也太棒了.测试加载和运行,没有问题.要求照顾一切.
现在,我希望像JSTestDriver这样的框架充当我的跑步者.我选择了JSTD,因为它简单,能够在远程浏览器上进行测试,支持代码覆盖,但仍然可以提供其他建议.
JSTestDriver本身工作正常,我唯一的问题是一起运行JSTD + Jasmine + ReuireJS组合.最大的问题是,如果我在配置文件中告诉JSTD关于Jasmine/Require测试模块以加载它,我会收到以下错误:
http://requirejs.org/docs/errors.html#mismatch
如果我使用r.js将我的所有代码优化为一个main.js,则该组合可以工作,包括Coverage,但覆盖范围是在一个巨大的文件上收集的,很难分析.更不用说设备50k行代码的js文件并通过JSTD运行它需要很长时间.
我试图创建一个加载我所有的茉莉花测试模块和代码模块的固定样js文件,但我的回头率上面的"不匹配"的错误,而且,如果我不告诉JSTD有关每个模块独立(通过加载一个html/js fixture执行实际加载)他们不会获得代码覆盖率的检测.
有没有人得到这个特定的组合工作?也许我要求太多了......
我正在通过编写一个简单的JavaScript游戏来学习谷歌关闭工具.我无法弄清楚如何设置jsTestDriver以便它与闭包库一起使用.
具体来说:我想使用goog.require机制来包含任何其他JavaScript文件,而不必手动将它们全部添加到配置文件中.
根据meyertee的建议,我制作了一个简单的脚本来自动将依赖项写入配置文件
#!/bin/bash
cp tests/jsTestDriver.conf.proto tests/jsTestDriver.conf
libs/closure-library/closure/bin/build/closurebuilder.py --root="./libs/closure-library" --root="./js" --namespace="lds" | sed "s#^# - \.\./#" >> tests/jsTestDriver.conf
Run Code Online (Sandbox Code Playgroud)
tests/jsTestDriver.conf.proto文件是一个简单的模板:
test:
- "*.js"
load:
- ../libs/knockout-2.1.0.js
# Crucial, the load key needs to be last, and this comment must be followed by a newline.
Run Code Online (Sandbox Code Playgroud)
这是一个非常脆弱的脚本,但希望有人(除了我)会发现它很有用.
我有一个用jQuery构建的动态页面.从胡子模板加载Html片段.这些模板是从网址下载的,我想对整个html结构进行单元测试:
JsTestDriver测试是:
AppTest = TestCase("AppTest")
AppTest.prototype.test = function() {
var actualHtml = "";
getHtml({ "title": "title", "header": "header", "text": "text", "authors": [ {"firstname": "firstname", "lastname": "lastname"} ] }, function(html) {
actualHtml = html;
});
assertEquals("expected html", actualHtml);
};
Run Code Online (Sandbox Code Playgroud)
和代码:
function getHtml(json, resultFunc) {
jQuery.ajax({
url: "url/to/mustache/template",
success: function(view) {
resultFunc(mergeArticleModelAndView(json, view));
},
error: function(jqXHR, textStatus, errorThrown) {
resultFunc(textStatus + " errorThrown: " + errorThrown);
},
dataType: 'text',
async: false
});
}
Run Code Online (Sandbox Code Playgroud)
然后我启动测试,结果是:
$ java -jar JsTestDriver-1.3.2.jar --port 9876 …Run Code Online (Sandbox Code Playgroud) 我想使用BrowserStack之类的browserfarms来运行UI测试.我们目前正在使用BS通过JsTestDriver运行单元测试.因此,启动服务器,让browserfarm创建的一堆浏览器连接到jstd服务器,然后执行测试.
不幸的是,我无法找到一种方法来编写与jstd一起使用的UI测试(单击某个按钮,键入内容等).
Selenium RC是一个旨在进行UI测试的框架,但它强制使用自己的浏览器实例:Selenium通过作为框架一部分的驱动程序启动自己的浏览器.
我想要的是将JsTestDriver概念与Selenium的UI测试相结合:使用Selenium编写测试,在本地主机上启动Selenium RC服务器,让一堆浏览器连接到在browserfarm上启动的服务器,然后执行UI试验.
这甚至可能吗?有没有其他方法可以使用JSTD运行UI测试?Selenium RC是否无法捕获未使用webdriver启动的浏览器?
提前致谢.
js-test-driver ×10
javascript ×8
jasmine ×2
unit-testing ×2
ajax ×1
angularjs ×1
ant ×1
backbone.js ×1
bdd ×1
hudson ×1
jenkins ×1
jquery ×1
netbeans ×1
requirejs ×1
selenium ×1
selenium-rc ×1
sinon ×1
ui-testing ×1