我想在定义测试之前做一个异步操作。例如,加载jsdom
环境。
这样做时,实习生会进行0次测试。
这样做的正确方法是什么?
我无法在配置本身中执行此操作,因为需要加载配置才能让实习生找到jsdom
。
我的实习配置加载以下文件:
define( [
"intern/dojo/node!jsdom"
], function(
jsdom
)
{
"use strict";
var body = "";
var scripts = [];
jsdom.env( body, scripts, function( err, window )
{
define( [
"./test_MyRenderer",
], function()
{
} );
} );
} );
test_Renderer,定义实际测试
define( [
"intern!bdd",
"intern/chai!expect",
"src/Renderer"
], function(
bdd,
expect,
Renderer
)
{
"use strict";
bdd.describe( "Renderer", function()
{
it( ...
it( ...
} );
答案 0 :(得分:3)
Intern配置文件可以有setup
和teardown
方法,就像测试套件一样。这些将在测试开始之前和完成之后运行。这是一个官方的,但尚未记录在案的特征。
答案 1 :(得分:0)
感谢@ jason0x43,我发现了config.setup
。不幸的是,这是在加载套件后执行的,这意味着我仍然需要在before钩子中加载源代码。为了完整起见,这是我的解决方案。
在实习生配置中:
cfg.setup = function()
{
return new Promise( function( resolve, reject )
{
require( [
"intern/dojo/node!jsdom"
], function(
jsdom
)
{
var body = "";
var scripts = [];
jsdom.env( body, scripts, function( err, window )
{
global.document = window.document;
resolve();
} );
} );
} );
};
我的测试套件:
define( [
"intern!bdd",
"intern/chai!expect",
], function(
bdd,
expect,
)
{
"use strict";
bdd.describe( "Renderer", function()
{
var RendererClass;
bdd.beforeEach( function()
{
return new Promise( function( resolve )
{
require( [ "src/Renderer" ], function( Renderer )
{
RendererClass = Renderer;
resolve();
} );
} );
} );
it( ... var subject = new Renderer(); ...
it( ...
} );