首页 > 代码库 > JavaScipt测试调研

JavaScipt测试调研

JavaScipt测试调研

1        JsUnit

1.1     简介

JsUnit是JavaScript的开源单元测试框架。它受到JUnit的启发,并完全用JavaScript编写。这是以前流行的一个JavaScript的单元测试工具,可以和Maven以及Ant结合来完成一些持续集成的工作。

1.2     使用步骤初探

(1)       下载JsUnit,然后解压文件。下载地址:http://sourceforge.net/projects/jsunit/?source=navbar

(2)       使用浏览器打开解压目录下的testRunner.html文件。

 

(3)       准备测试用例,可以直接使用下载目录中的tests文件夹中的一个测试用例的page来做试验。

(4)       运行测试用例,将测试套件或者测试文件路径填入输入框中。点击运行即可,运行完后我们可以看到运行后的结果。

1.3     JsUnit测试用例的编写示例

(1)       一个简单的测试用例的编写

<html>

 <title>A unit test for drw.SystemUnderTest class</title>

 <head>

  <script type=‘text/javascript‘ src=http://www.mamicode.com/‘../jsunit/app/jsUnitCore.js‘></script>

  <link rel="stylesheet" type="text/css" href="http://www.mamicode.com/css/jsUnitStyle.css">

  <script type=‘text/javascript‘ src=http://www.mamicode.com/‘../app/system_under_test.js‘></script>

  <script type=‘text/javascript‘>

    function setUp(){

      // perform fixture set up

    }

    function tearDown() {

      // clean up

    }

    function testOneThing(){

      // instantiating a SystemUnderTest, a class in the drw namespace

      var sut = new drw.SystemUnderTest();

      var thing = sut.oneThing();

      assertEquals(1, thing);

    }

    function testAnotherThing(){

      var sut = new drw.SystemUnderTest();

      var thing = sut.anotherThing();

      assertNotEquals(1, thing);

    }

  </script>

 </head>

 <body/>

</html>

 

 

以上为测试用例的编写的一个示例,我们可以上面就是一个html的文件。我们需要在html文件的head中引入jsUnitCore.js以及jsUnitStyle.css两个文件,个文件一个JsUnit的核心框架。还需要加入我们的需要测试的js脚本文件system_under_test.js。

后面可以看到有和junit相同的setup以及teardown,这里的两个函数是测试用例的准备和最后的处理,在每个测试用例之前和之后执行。

testOneThing()以及testAnotherThing()这两个函数就是测试用例,里面完成需要测试的内容。

与Junit相同,在JsUnit中也定义了很多的断言函数。形如assert**的函数都是其断言函数,我们使用这些函数来判定结果是与预期相同。

(2)       JsUnit测试集编写

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

    <title>JsUnit Test Suite</title>

    <link rel="stylesheet" type="text/css" href="http://www.mamicode.com/css/jsUnitStyle.css">

    <script type="text/javascript" src="http://www.mamicode.com/app/jsUnitCore.js"></script>

    <script type="text/javascript">

        function coreSuite() {

            var result = new JsUnitTestSuite();

            result.addTestPage("tests/jsUnitAssertionTests.html");

            result.addTestPage("tests/jsUnitFrameworkUtilityTests.html");

            result.addTestPage("tests/jsUnitOnLoadTests.html");

            result.addTestPage("tests/jsUnitRestoredHTMLDivTests.html");

            result.addTestPage("tests/jsUnitSetUpTearDownTests.html");

            result.addTestPage("tests/jsUnitTestManagerTests.html");

            result.addTestPage("tests/jsUnitParamsTests.html");

            result.addTestPage("tests/jsUnitTestSetUpPages.html");

            result.addTestPage("tests/jsUnitTestSuiteTests.html");

            result.addTestPage("tests/jsUnitUtilityTests.html");

            result.addTestPage("tests/TestPageTest.html");

            result.addTestPage("tests/UiManagerTest.html");

            return result;

        }

        function librariesSuite() {

            var result = new JsUnitTestSuite();

            result.addTestPage("tests/jsUnitMockTimeoutTest.html");

            result.addTestPage("tests/jsUnitAjaxTest.html");

            return result;

        }

        function suite() {

            var newsuite = new JsUnitTestSuite();

            newsuite.addTestSuite(coreSuite());

            newsuite.addTestSuite(librariesSuite());

            return newsuite;

        }

    </script>

</head>

<body>

<p>This page contains a suite of tests for testing JsUnit.</p>

</body>

</html>

以上的代码就是测试集的编写,测试集和Junit的概念一致。为了定义一个测试集,需要创建一个名为suite的函数,它会返回一个JsUnitTestSuite的对象。然后通过增加测试用例页面或者其他测试集对象来建立JsUnitTestSuite对象。在上面的例子中最终coreSuite和librariesSuite两个函数返回的JsUnitTestSuite对象在suite函数中加入到了一个JsUnitTestSuite对象中,然后返回该对象。

2        Jasmine

2.1     简介

Jasmine 是一款行为驱动的JavaScript 测试框架,它不依赖于其他任何 JavaScript 框架。它有干净清晰的语法,让您可以很简单的写出测试代码。对基于 JavaScript 的开发来说,它是一款不错的测试框架选择。

2.2     使用步骤初探

(1)       下载Jasmine

下载地址:https://github.com/pivotal/jasmine/releases

Introduction:http://jasmine.github.io/2.0/introduction.html

(2)       目录解析

解压下载下来的zip文件,点开文件夹。看到有如下的目录,其中lib为Jasmine 的源代码。src为一个示例中被测的js文件,spec为编写的测试用例代码,SpecRunner.html为加入

 

(3)       运行测试用例

解压文件后可以看到有一个文件叫做:SpecRunner.html,点击使用浏览器打开就能够运行相关的测试用例了。

在浏览器中打开运行完后我们可以看到一个结果页面,页面会展示运行的结果信息。

 

2.3     测试用例编写

(1)       一个简单的测试用例

  describe("when song has been paused", function() {

    beforeEach(function() {

      player.play(song);

      player.pause();

    });

 

    it("should indicate that the song is currently paused", function() {

      expect(player.isPlaying).toBeFalsy();

 

      // demonstrates use of ‘not‘ with a custom matcher

      expect(player).not.toBePlaying(song);

    });

 

    it("should be possible to resume", function() {

      player.resume();

      expect(player.isPlaying).toBeTruthy();

      expect(player.currentlyPlayingSong).toEqual(song);

    });

  });

 

describe 是 Jasmine 的全局函数,作为一个 Test Suite 的开始,它通常有 2 个参数:字符串和方法。字符串作为特定 Suite 的名字和标题。方法是包含实现 测试用例集的代码。

Specs 通过调用 it 的全局函数来定义。和 describe 类似,it 也是有 2 个参数,字符串和方法。每个 Spec 包含一个或多个 expectations 来测试需要测试代码。每个it就是一个测试用例。

         Jasmine 中的每个 expectation 是一个断言,可以是 true 或者 false。当每个 Spec 中的所有 expectations 都是 true,则通过测试。有任何一个 expectation 是 false,则未通过测试。而方法的内容就是测试主体。

3        JSLint

3.1     简介

JSLint是一款 JavaScript语法检查和验证工具,可以扫描JavaScript源代码来查找问题。JSLint不是一款开源的软件,它使用纯JavaScript编写。JSLint定义了一个专业的语法规则和建议的集合。

如果JSLint发现一个问题,JSLint就会显示描述这个问题的消息,并指出错误在源代码中的大致位置。有些编码风格约定可能导致未预见的行为或错误,JSLint除了能指出这些不合理的约定,还能标志出结构方面的问题。尽管JSLint不能保证逻辑一定正确,但确实有助于发现错误,这些错误很可能导致浏览器的 JavaScript引擎抛出错误。

JSLint 执行代码质量检测的原理核心在于用户设定的规则集。JSLint 默认提供的规则集包含了 Web 开发人员多年积累下来的认为不好的开发风格,我们可以根据自己项目的需求选择构建一套特定的规则。JSLint 将根据它进行对 JavaScript 脚本的扫描工作,并给出相应的问题描述信息。

3.2     JSLint用法初探

(1)              直接使用http://www.jslint.com/网址进行检测。在输入框中你的JavaScript脚本。然后点击JSLint按钮,我们就可以看到了JSLint说到的我们的错误之处。

这个页面还提供一些其他的规则,如果你不选择这些规则,则按照JSLint的默认的规则进行

JavaScipt测试调研