我在使用功能测试的任何dojo模块时遇到问题,我一直看到window
未定义错误或document
未定义。
我目前正在尝试像dijit/registry
那样使用(目前只导入其模块)..
define([
'intern!object',
'intern/chai!assert',
'require',
'dijit/registry'
], function (registerSuite, assert, require, registry) {
registerSuite({
name: 'login',
'load and login': function () {
return this.remote.get(require.toUrl('http://application.co.uk/'))
.elementById('input1')
.click()
.type("username")
.end()
.elementById('input2')
.click()
.type("password")
.end()
.elementById('rememberMe')
.click()
.end()
.elementByName('Login.Submit')
.click()
.end()
.wait(5000)
.title()
.then(function (title) {
assert.strictEqual(title, 'Application title');
});
}
});
});
...我从节点收到以下错误...
$ ./libs/intern/bin/intern-runner.js config=test/intern
Defaulting to "runner" reporter
Listening on 0.0.0.0:9000
c:/.../libs/dojo/_base/unload.js:6
var win = window;
^
ReferenceError: window is not defined
at c:/.../libs/dojo/_base/unload.js:6:11
at execModule (c:\...\libs\intern\node_modules\dojo\dojo.js:512:54)
at c:\...\libs\intern\node_modules\dojo\dojo.js:501:12
at Array.map (native)
at execModule (c:\...\libs\intern\node_modules\dojo\dojo.js:496:17)
at c:\...\libs\intern\node_modules\dojo\dojo.js:501:12
at Array.map (native)
at execModule (c:\...\libs\intern\node_modules\dojo\dojo.js:496:17)
at c:\...\libs\intern\node_modules\dojo\dojo.js:501:12
at Array.map (native)
我已经阅读了上一个问题about using dojo/text!
in a similar way,这似乎表明实习生的Geezer版本可以处理这个问题吗?
没有注册表模块,测试运行良好。
更新
好的,基于C Snover的响应,你不能利用web dijit/registry
方法之外的execute()
之类的东西,因为代码需要在Web浏览器的上下文中,而不是功能测试。< / p>
答案 0 :(得分:2)
功能测试从Node.js内部运行,而不是在浏览器环境中运行。如果要访问正在测试的页面中加载的dijit/registry
实例,则需要使用execute
在远程环境中运行函数:
return this.remote
.get('http://application.co.uk')
.execute(function () {
// this function runs in the browser!
var registry = require('dijit/registry');
// ... do things with registry
return something;
})
.then(function (something) {
// this function runs inside the test runner!
assert.isTrue(something);
});
您将无法从功能测试模块定义具有DOM要求的依赖项(如dijit/registry
)。只有基于浏览器的单元测试模块才能加载这些依赖项。
答案 1 :(得分:0)
还有dijit-intern-helper-> https://github.com/SitePen/dijit-intern-helper
所以
executeAsync(function (done) {
require(['dijit/registry'], function (registry) {
done(registry.byId('titlePane').titleBarNode);
});
})
.then(function (node, setContext) {
setContext(node);
})
.click()
成为
.then(dijit.nodeById('titlePane', 'titleBarNode'))
.click()
关于它的博客文章-> https://www.sitepen.com/blog/simplified-dijit-functional-testing/