Mop*_*ath 3 mocha.js node.js chai
在mocha + chai测试代码中,我有一个before块来初始化一些变量“ accPolicyData.accSizes”。
1 var expect = require('chai').expect;
2 var dataDriven = require('data-driven');
3 var accPolicyData = require("./samples/accounts-policy-data");
4 var configReadr;
5 var ecpDB; // = require('ecp_model');
6 var utils = require('../test_utils');
7
8 describe("Test suite for account policy limits validation", function() {
9
10 before(function(done) {
11
12 // read and process commandline args.
13 var args = utils.processArgs(process.argv);
14 console.log("Args:", args);
15 global.args = args;
16 configReader = require('../config_reader')();
17 configReader.read().then(function() {
18 ecpDB = require('ecp_model');
19
20 // Read the policy limits from ecp db
21 ecpDB.AccountTemplate.findAll().then(function(results) {
22 return results.map(function(item) { return item.toJSON(); });
23 }).then(function(results) {
24 accPolicyData.accSizes = results;
25 return done();
26 })
27 });
28 }); //EOF:before
Run Code Online (Sandbox Code Playgroud)
var初始化后(第24行),我计划通过遍历结果集(第39行)在随后的describe块中使用填充的数据。
36 describe("test cases", function() {
37 // Iterate the account types array
38 //dataDriven(accPolicyData.accTypes,function(type) {
39 accPolicyData.accSizes.map(function(item) {
40 console.log("Iterating through data...", item);
41 testAccSizePolicy(type);
42 });
43 //});
44 })
Run Code Online (Sandbox Code Playgroud)
但是,问题在于,在执行此describe块时不会填充此数组,因此不会执行循环。如果我在describe中直接有一个“ it()”块,则它可以正确执行,但是以某种方式无法进行数组迭代。
我的before()代码是异步的,并且我已经小心地正确调用了done()函数。
因此,似乎不属于它(...)的代码将尽早执行(在完成回调之前),而位于“ it”内部的代码将按顺序执行。
我的理解正确吗?
我试图通过使用嵌套循环来避免重复描述/重复块。似乎我无法做到这一点。这里有什么想法吗?
摩卡设计在需要它来提前知晓所有的存在,所以所有的回调,通过测试的方式describe被执行立即,而所有的钩子(before,beforeEach,等)并进行测试(it)注册自己的回调,将来执行。然后,当Mocha准备好实际运行测试时,它将调用这些回调。
最终,您似乎要尝试从异步算法生成测试套件。Mocha不允许您从挂钩或测试生成测试套件。您不能it从before通话中进行呼叫,等等。如果尝试,可能会发现它似乎按预期工作的情况,但是一旦有了真正的套件(反对概念证明),您就会遇到怪异的行为。
您可以使用异步生成测试套件--delay。(您可能应该将其放入mocha.opts以便始终使用。)然后,run()在构建套件后调用。(在此页面上搜索“延迟的根套件” 。)
| 归档时间: |
|
| 查看次数: |
2904 次 |
| 最近记录: |