Nodejs 使用mocha自动化测试程序

Nodejs 使用mocha自动化测试程序

之前有过一篇比较简单的关于 mocha 做自动化测试的帖子, mocha测试 今天稍晚详细点说下. 常见的开源项目你都会发现test目录,当然我们自己创建的项目建议也加上此目录,在这个目录下做自动化测试.目前node.js下做自动化测试的工具也很多,今天我们主要来介绍下如何使用mocha进行自动化测试. 安装 mocha npm install -g mocha

这样你就可以创建测试脚本了,如下:

var assert = require("assert");
describe('Array', function(){
  describe('#indexOf()', function(){
    it('should return -1 when the value is not present', function(){
      assert.equal(-1, [1,2,3].indexOf(5));
      assert.equal(-1, [1,2,3].indexOf(0));
    })
  })
})

上面是官网上的一个例子,直接拿过来说明一下.

assert 是一个断言模块,node.js源码中包含此模块,当然你可以选择其他第三方的断言包来做测试.

上面的例子就是想对Array类下 indexOf 方法做一个测试,断言 indexOf 得到的值是否等于前面的赋值. 实际中的测试都比较复杂,可能测试文件 a.js 和测试文件 b.js 是有关系的,也就是说 b.js 中用到的参数都是又 a.js 提供的.

这是可能要借助一个全局变量文件 globalConstant.js 文件,内容如下:

global.global_user={}; 很简单的一个全局用户变量,那么在测试a.js的时候我们需要给这个全局变量赋值,然后测 b.js 的时候再使用这个变量值.

a.js 的内容如下:

var assert = require("assert");
require('../utils/FakeHTTP');

var game_user = { user_id: 0, token: ‘’ };

var userid=‘zhangzhi’, password=‘000000’; //这里的 userid 和 password 俩个参数完全可以设置 before(function(){ …} 从前面的文件中导出,这里我们简单直接定义.

//after 是测试完成后把一些后面文件需要的参数全部导出. after(function() { global_share_data.game_user = game_user; });

describe(“Email User”, function() { //定义user变量 var game_user = { game_id: 0, user_id: 0, token: ‘’ };

it("login by userID and password", function(done) {
        FakeHTTP.request('/account/login', game.makeSign({
            user_id: userid,
            password: password
        }), function(status, res) {
            assert.equal(status, 200);
            assert.equal(!res.error_code, true, res.error);
            assert.ok(res.user_id, 'Not found user_id');
            assert.ok(res.user_token, 'Not found user token');
            game_user.game_id = res.gameID;
            game_user.user_id = res.userid;
            game_user.token = res.user_token;
            done();
        });
    });

});

上面有注释,大概需要大家了解的一个是 before 一个是 after

before 用在测试用例之前,就是需要提前准备的一些参数,一般是此测试文件之前的文件导出的.

after 是用在测试用例执行完成后,需要导出的一些参数以供后面的测试文件使用这些参数,(所以我上面注释了 userid 和 password 应该是前面文件after 以后,在 a.js before 里使用即可,就不需要在文件里面指定变量值了.

ok,上面的 a.js 测试自行完成后导出了 game_user 我们在b.js 文件里就可以使用这个导出变量了.如下代码:

更多内容请访问 原文地址: http://www.yijiebuyi.com/blog/45558044cdaab883a1fd424c238198c3.html 一介布衣博客


4 回复

Nodejs 使用 Mocha 自动化测试程序

之前有过一篇比较简单的关于 Mocha 做自动化测试的帖子,今天会详细讲解一下。

在常见的开源项目中,你通常会看到 test 目录。为了更好地组织代码,建议在自己创建的项目中也添加此目录,并在此目录下进行自动化测试。目前,Node.js 下有很多用于自动化测试的工具,今天我们主要来介绍如何使用 Mocha 进行自动化测试。

安装 Mocha

首先,你需要安装 Mocha。可以通过 npm 全局安装:

npm install -g mocha

创建测试脚本

接下来,我们可以创建一个简单的测试脚本来理解 Mocha 的基本用法。例如,我们为数组的 indexOf 方法编写一个测试脚本:

// test/array-test.js
var assert = require("assert");

describe('Array', function(){
  describe('#indexOf()', function(){
    it('should return -1 when the value is not present', function(){
      assert.equal(-1, [1,2,3].indexOf(5));
      assert.equal(-1, [1,2,3].indexOf(0));
    });
  });
});

在这个例子中,assert 是 Node.js 源码中自带的断言模块。我们也可以选择其他第三方的断言库,比如 chai 或者 expect.

复杂测试场景

在实际项目中,测试通常会更加复杂。假设我们有两个文件 a.jsb.js,其中 b.js 需要依赖于 a.js 中的某些数据。我们可以使用一个全局变量文件 globalConstant.js 来存储这些数据。

// globalConstant.js
global.global_user = {};

编写 a.js 测试文件

a.js 文件中,我们需要初始化一些全局变量,并在测试完成后导出它们。

// test/a.js
var assert = require("assert");
require('../utils/FakeHTTP');

var game_user = {
    user_id: 0,
    token: ''
};

var userid = 'zhangzhi',
    password = '000000';

describe("Email User", function() {
    var game_user = {
        game_id: 0,
        user_id: 0,
        token: ''
    };

    it("login by userID and password", function(done) {
        FakeHTTP.request('/account/login', game.makeSign({
            user_id: userid,
            password: password
        }), function(status, res) {
            assert.equal(status, 200);
            assert.equal(!res.error_code, true, res.error);
            assert.ok(res.user_id, 'Not found user_id');
            assert.ok(res.user_token, 'Not found user token');
            game_user.game_id = res.gameID;
            game_user.user_id = res.userid;
            game_user.token = res.user_token;
            done();
        });
    });

    after(function() {
        global.global_user = game_user;
    });
});

编写 b.js 测试文件

b.js 文件中,我们可以使用 a.js 导出的数据。

// test/b.js
var assert = require("assert");

describe("Use Global User Data", function() {
    it("verify user data", function() {
        assert.ok(global.global_user.game_id, "Game ID should be set");
        assert.ok(global.global_user.user_id, "User ID should be set");
        assert.ok(global.global_user.token, "Token should be set");
    });
});

运行测试

最后,运行 Mocha 测试脚本:

mocha test/

通过上述步骤,我们可以看到如何使用 Mocha 进行自动化测试,包括处理复杂的测试场景和共享全局变量。希望这些示例能够帮助你更好地理解和使用 Mocha 进行 Node.js 项目的自动化测试。


代码可以用 markdown 标记一下

在Node.js中使用Mocha进行自动化测试是一种常见的实践。Mocha是一个强大的测试框架,可以方便地编写和运行测试用例。以下是如何使用Mocha进行自动化测试的基本步骤和示例代码。

安装Mocha

首先,确保已经全局安装了Mocha:

npm install -g mocha

如果需要在项目本地安装,则可以使用:

npm install --save-dev mocha

示例代码

假设有一个简单的sum.js文件,内容如下:

// sum.js
function sum(a, b) {
  return a + b;
}

module.exports = sum;

接下来编写对应的测试文件sum.test.js

// sum.test.js
const assert = require('assert');
const sum = require('./sum');

describe('Sum Function', function() {
  it('should return the correct sum', function() {
    assert.strictEqual(sum(1, 2), 3);
    assert.strictEqual(sum(-1, 1), 0);
  });

  it('should handle non-numeric values', function() {
    assert.strictEqual(sum('1', 2), NaN);
    assert.strictEqual(sum(1, '2'), NaN);
  });
});

运行测试

在命令行中运行测试:

mocha sum.test.js

或者如果你想运行当前目录下的所有测试文件,可以使用:

mocha

解释

  • describe:用来定义一个测试套件(一组相关的测试用例)。
  • it:定义一个具体的测试用例。
  • assert.strictEqual:用于断言两个值是否相等。

通过这种方式,我们可以很方便地对函数进行单元测试,并且可以通过添加更多的测试用例来覆盖不同的场景。

总结

Mocha提供了一个灵活且易于使用的框架来编写和运行测试用例。通过合理组织测试文件和测试用例,可以有效地提高代码质量和稳定性。

回到顶部