this question的答案无法回答我的问题。
我想使用Intern作为我的测试框架从项目根目录外部加载依赖项。我目前正在使用以下目录结构:
www/
project1/
app/
lib/
project2/
app/
lib/
intern-tests/
node_modules/
tests/
functional/
project1-tests/
project2-tests/
unit/
project1-tests/
project2-tests/
intern.js
Gruntfile.js
正如您所看到的,我正在制作intern-tests
个自己的项目,并且希望此目录能够所有我我的项目的所有测试。我已经设置了我的Gruntfile来使用grunt exec库执行测试,将grunt projectName
命令转换为grunt test --project=projectName
。一切正常,但我的单元测试无法加载project1/
和project2/
目录中的依赖项。
例如,这是我的单元测试之一:
define([
'intern!object',
'intern/chai!assert',
'jquery',
'../../../../project2/lib/js/var/document',
'../../../../project2/lib/js/exports/file/functions/resizeInput'
], function(registerSuite, assert, $, document, resizeInput) {
registerSuite({
name: 'functions',
resizeInput: function() {
var $input = $(document.createElement('input'));
resizeInput($input, 8, 20, 450, 200);
assert.equal($input.width(), 450);
}
});
});
并运行该测试会给我以下错误:
SUITE ERROR
Error: Failed to load module ../project2/lib/js/var/document from
project2/lib/js/var/document.js (parent: tests/unit/project2/functions)
at HTMLScriptElement.handler <__intern\node_modules\dojo\loader.js:517:27>
如何在其他项目中包含这些外部文件?
答案 0 :(得分:2)
也许我的想法太简单了,但我想起来就是这样:
实现您想要实现的目标:
cd /path/to/project1/
npm link
cd /path/to/project2/
npm link
cd /path/to/intern_tests/
npm install project1 project2
您现在有一个类似的项目结构:
intern_tests/
node_modules/
project1
project2
tests/
unit/
functional/
答案 1 :(得分:0)
好吧,所以在有人提出更好的解决方案之前,我只想在我的intern-tests/
项目文件夹中创建符号链接。
要在Windows上执行此操作,如下所示:
mklink /j "c:\www\intern-tests\project-symlinks\project2" c:\www\project2
具有约定mklink /j "path\to\symlink" path\to\original
(/ j用于结点)
在Mac / Linux上,您将执行以下操作:
ln -s /www/project2 /www/intern-tests/project-symlinks/project2
具有约定ln -s /path/to/original /path/to/symlink
(-s用于符号)
如下所示:
www/
project1/
app/
lib/
project2/
app/
lib/
intern-tests/
project-symlinks/
project1/
project2/
node_modules/
tests/
functional/
project1-tests/
project2-tests/
unit/
project1-tests/
project2-tests/
intern.js
Gruntfile.js
并将我的测试更改为以下内容:
define([
'intern!object',
'intern/chai!assert',
'jquery',
'../../../project-symlinks/project2/lib/js/var/document',
'../../../project-symlinks/project2/lib/js/exports/file/functions/resizeInput'
], function(registerSuite, assert, $, document, resizeInput) {
registerSuite({
name: 'functions',
resizeInput: function() {
var $input = $(document.createElement('input'));
resizeInput($input, 8, 20, 450, 200);
assert.equal($input.width(), 450);
}
});
});