标签: js-test-driver

NetBeans上的JsTestDriver在断言失败后停止测试

我根据此链接在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)

所有三个测试都在运行.

javascript netbeans js-test-driver

178
推荐指数
1
解决办法
4816
查看次数

使用Sinon.js而不是Jasmine的内置Spys有什么好处?

我正在拼凑一个jsTestDriver/Jasmine环境来测试我们的前端代码,我看到很多对Sinon.js的引用,用于独立(或插入)间谍.有人能描述一下Sinon.js给Jasmine不用于测试用户界面的表吗?

javascript bdd js-test-driver jasmine sinon

20
推荐指数
1
解决办法
3324
查看次数

如何在无头模式下运行浏览器(chrome,IE和firefox)?

我想将JSTestDriver与jenkins-CI集成.问题是构建服务器没有显示.有没有办法无头地运行浏览器?

谢谢

javascript js-test-driver headless-browser

9
推荐指数
1
解决办法
1万
查看次数

从ANT将命令行参数传递给jstestdriver JAR?

我正在尝试使用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的选项列表.

我不确定我做错了什么......

javascript ant unit-testing js-test-driver

8
推荐指数
1
解决办法
1158
查看次数

如何在Jenkins上使用远程浏览器进行js-test-driver任务?

我们使用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遇到同样的问题,可能是因为:

  1. 它是一个服务器,我们作为服务帐户运行
  2. 服务器上的浏览器安装存在安全限制

GettingStarted页面JS测试驱动器维基说,我们可以在不同的机器比在JS测试驱动程序服务器运行上运行的浏览器:

在运行任何测试之前,您需要启动测试服务器并捕获至少一个从属浏览器.服务器不必驻留在测试运行所在的机器上,并且浏览器本身也可以位于不同的机器上.

  1. 有人在Jenkins/Windows设置上做过这个吗?
  2. 是否有其他可选的可扩展设置来运行js-test-driver?

continuous-integration hudson windows-server-2003 js-test-driver jenkins

8
推荐指数
1
解决办法
1796
查看次数

如何使用JsTestDriver测试AngularJS控制器?

我有以下代码:

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)

javascript js-test-driver angularjs

7
推荐指数
1
解决办法
2915
查看次数

Jasmine + JSTestDriver +覆盖范围+ RequireJS

哇,真是一团糟.这就是场景.

  • 骨干驱动的JS应用程序.
  • 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 js-test-driver requirejs backbone.js jasmine

7
推荐指数
1
解决办法
4782
查看次数

使用带有jsTestDriver的闭包库

我正在通过编写一个简单的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)

这是一个非常脆弱的脚本,但希望有人(除了我)会发现它很有用.

unit-testing google-closure-library js-test-driver

7
推荐指数
1
解决办法
1174
查看次数

如何使用JsTestDriver测试jquery和ajax调用?

我有一个用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)

javascript ajax jquery js-test-driver

6
推荐指数
2
解决办法
5687
查看次数

使用Selenium RC捕获浏览器

我想使用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启动的浏览器?

提前致谢.

javascript selenium ui-testing selenium-rc js-test-driver

6
推荐指数
1
解决办法
410
查看次数