@ bedrock/测试
概览
Bedrock后端测试使用Mocha而前端测试使用Karma. 改为: 运行多个模块测试,因果测试和摩卡测试都可以 从本单元中初始化并配有人员。 然而,这也是可能的 一次在一个模块上运行测试.
所需资源
这个软件需要并支持维持了最新版本的Node.js. 更新可能会去除对旧的未维护的平台版本的支持. 请使用 依赖版本锁定文件和测试以确保与此兼容 软件.
Mocha 测试
模块的测试旨在独立于一个完整的基石 发展环境。 要在模块上进行测试,只需要模块 将被复制。 可以在当地建立测试环境,并进行测试.
有关Mocha的更多信息,参见: https://mochajs.org/#获得-启动
设置
本节介绍试验环境. 后一节将 描述实际测试.
快速设置示例
为了对单个模块进行测试,克隆模块:
npm install bedrock-module
测试目录中所需的 Bedrock 模块 bedrock-modules/test数字 :
npm install
在同一地点进行测试:
npm test
做一个 npm install 在模块测试目录中填充 Bedrock
测试目录中的模块,基于包含在
bedrock-module/test/package.json。 。 。 .
如何运作
-
模块的测试环境设置并在此范围内执行 模块的
test目录。 测试脚本设置在package.json文件 运行测试套件npm test在命令行中输入."scripts": { "test": "node --preserve-symlinks test.js test" }这将运行测试文件
test.js。 。 。 . -
test.js将装入所需的模块,包括@bedrock/test并开始贝德洛克. -
index.js模块中的./lib目录将运行,任何所需的模块将从test/node_modules目录. -
模块的配置文件,
config.js,首先被加载,但必须注意的是,最后一个配置文件将覆盖以前的配置. 比如说,就我们来说config.test.js将覆盖config.js由于测试配置文件是稍后加载的. -
bedrock.events.on('bedrock.test.configure')是一个会执行的听众bedrock.test.configure中设置@bedrock/test模块。 这样可以装入test.config.js。 。 。 . -
test.config.js设置数据库并创建许可角色。 还可以加载其中包含的所有测试文件mocha通过此行的目录 :config.mocha.tests.push(path.join(__dirname, 'mocha'));一个数组与其中的所有 *.js 文件一起创建
test/mocha文件夹,文件按顺序执行。 通常的做法是按照您希望测试执行的顺序对这些文件进行编号 . -
帮助函数、模拟数据和其他支持代码可以包含在其中的其他文件中
test/mocha目录。 譬如说,mock.data.js财务报告和审定财务报表helpers.js是基建模块测试中常见的额外文件.
测试
本节介绍实际测试. 测试使用Mocha和chai,并存在于 test/mocha 目录。 需要指出的一些要点涉及测试.
快速测试示例
以下为典型测试的例子. 这个测试一个普通用户通过基建键加PublicKey API来添加公钥.
测试在一开始做一些数据准备,然后在每次测试之间清除一些测试数据. 许多测试的一般流量与这个相似:
- 建立进行测试所需的数据和身份.
- 执行考核.
- 将实际结果同预期成果进行比较.
大部分的工作和下面的例子都集中在步骤1:数据和身份的设置.
*** 说明:这些例子已过时;基本身份已去除***
在测试中,设置预装数据来自 mock.data.js 使用辅助函数输入数据库:
var mockData = require('./mock.data');
before(done => {
helpers.prepareDatabase(mockData, done);
});
与通常情况一样,建立这种数据是为了代表具有特定一组系统资源角色(permissions)的不同身份. 内部 mock.data.js,用于创建身份的帮助函数 :
var mock = {};
module.exports = mock;
var identities = mock.identities = {};
var userName;
userName = 'regularUser';
identities[userName] = {};
identities[userName].identity = helpers.createIdentity(userName);
系统资源角色作为身份设置的一部分被添加. 配对通常是权限( sysRole) 和权限应用的资源或资源(基因资源):
identities[userName].identity.sysResourceRole.push({
sysRole: 'bedrock-key.test',
generateResource: 'id'
});
在这种情况下, 'bedrock-key.test' 是一个系统角色,定义于 test.config.js 允许用户访问、删除、创建或编辑每个资源的公钥:
roles['bedrock-key.test'] = {
id: 'bedrock-key.test',
label: 'Key Test Role',
comment: 'Role for Test User',
sysPermission: [
permissions.PUBLIC_KEY_REMOVE.id,
permissions.PUBLIC_KEY_ACCESS.id,
permissions.PUBLIC_KEY_CREATE.id,
permissions.PUBLIC_KEY_EDIT.id
]
};
在每次测试之前,或在测试之间,特定测试数据从测试内的数据库中清除:
beforeEach(function(done) {
helpers.removeCollection('publicKey', done);
});
可以为一组测试设定身份以避免重复. 在这种情况下,为具有相关资源作用的普通用户设定身份. 将使用这种身份进行若干测试:
describe('authenticated as regularUser', () => {
var mockIdentity = mockData.identities.regularUser;
var actor;
before(done => {
brIdentity.get(null, mockIdentity.identity.id, (err, result) => {
actor = result;
done(err);
});
});
});
最后,进行测试并检查数据:
it('should add a valid public key with no private key', done => {
var samplePublicKey = {};
samplePublicKey.publicKeyPem = mockData.goodKeyPair.publicKeyPem;
samplePublicKey.owner = actor.id;
async.auto({
insert: function(callback) {
brKey.addPublicKey(actor, samplePublicKey, callback);
},
test: ['insert', function(callback, results) {
database.collections.publicKey.find({
'publicKey.owner': actor.id
}).toArray(function(err, result) {
should.not.exist(err);
should.exist(result);
result[0].publicKey.publicKeyPem.should.equal(
samplePublicKey.publicKeyPem);
callback();
});
}],
}, done);
});
此测试使用普通用户身份来测试API. 这个 brKey.addPublicKey 函数调用将执行测试。 对预期结果与实际结果的比较采用下列方法: should 摩查指令. 如果成功,测试将继续; 如果出现故障,测试就会停止.
剖析测试
如何描述一个基建测试套件:
对任何摩卡测试文件进行本地修改 :
// do not include this in package.json; it will be installed by npx
import nsolid from 'nsolid';
describe.only('some suite', function() {
before(async () => {
// wait for nsolid to be ready
await delay(5000);
// or without `delay` library
// await new Promise(r => setTimeout(r, 5000));
// start nsolid profile and run for up to 60000ms
nsolid.profile(60000);
});
after(() => {
// stop the profile if it hasn't already timed out
nsolid.profileEnd();
});
// it(...)
});
然后运行 :
npx nsolid-quickstart --npm test
配置完成后,您的浏览器应该打开一页到 nsolid
用户界面可以使用您的 GitHub ID 登录 。 那就看下面,看那边 assets 改为
参见生成的配置文件.
许可证
Apache 许可证,2.0版本 版权所有 2011-2024 Digital Bazaar, Inc.
其他贝德罗克图书馆可使用非商业许可证 诸如自学、研究、个人项目或评价目的. 见 Bedrock 非商业许可证 v1.0 详细情况.
商业许可证和通过联系获得支助 数字集市 支持@ digitalbazaar.com。 。 。 .