为了证明我的问题,这里过分简化了我想要做的事情:
我有两个功能测试:login
和logout
。我创建了一个UI,允许用户(读取:其他开发人员)在给定的浏览器上选择和运行给定的测试。
如果logout
没有先运行,login
将会失败,这很明显。为了解决这个问题,我在loggedIn
测试中设置了一个全局变量login
,并将以下设置功能添加到我的logout
测试中:
setup: function() {
if (!globals.get('loggedIn')) {
return require('./login')();
}
},
这在require
语句处失败,并显示以下错误消息:
SUITE ERROR
Error: Attempt to require unloaded module tests/functional/login
如何使我的设置功能运行login
测试,而不将测试复制粘贴到我的每个测试文件中?
完整的测试套件:
login.js
define([
'intern!object',
'intern/chai!assert',
'../../var/globals'
], function(registerSuite, assert, globals) {
registerSuite({
name: 'logout',
'logout': function() {
return this.remote
.get('www.example.com/login')
.findById('status')
.getVisibleText()
.then(function(text) {
var loggedIn = text === 'logged-in';
if (loggedIn) globals.set('loggedIn', true);
assert.equal(loggedIn, true);
});
}
});
});
logout.js
define([
'intern!object',
'intern/chai!assert',
'require',
'../../var/globals'
], function(registerSuite, assert, require, globals) {
registerSuite({
name: 'logout',
setup: function() {
if (!globals.get('loggedIn')) {
return require('./login')();
}
},
'logout': function() {
return this.remote
.get('www.example.com/logout')
.findById('status')
.getVisibleText()
.then(function(text) {
assert.equal(text, 'logged-out');
});
}
});
});
all.js
define([
'./login.js',
'./logout.js'
// other tests that also depend on login.js
], function() {});
我想运行logout
测试以运行login
,并运行all
测试以运行login
测试一次,无论有多少其他测试取决于login
。
答案 0 :(得分:0)
编辑:问题是由require
同步造成的。使用define
中使用的依赖关系数组加载模块只会运行一次测试。这意味着您只需将任何测试添加为依赖项,而无需更改任何测试组(例如我的all
测试)。
这会将我的模块更改为以下内容:
login.js
define([
'intern!object',
'intern/chai!assert',
// globals var removed
], function(registerSuite, assert) {
registerSuite({
name: 'logout',
'logout': function() {
return this.remote
.get('www.example.com/login')
.findById('status')
.getVisibleText()
.then(function(text) {
assert.equal(text, 'logged-in');
});
}
});
});
logout.js
define([
'intern!object',
'intern/chai!assert',
// require removed
// globals var removed
'./login' // login module added
], function(registerSuite, assert) {
registerSuite({
name: 'logout',
// setup method removed
'logout': function() {
return this.remote
.get('www.example.com/logout')
.findById('status')
.getVisibleText()
.then(function(text) {
assert.equal(text, 'logged-out');
});
}
});
});
all.js(保持不变)
define([
'./login.js',
'./logout.js'
// other tests that also depend on login.js
], function() {});