在实习生中加载项目目录之外的依赖项

时间:2015-11-03 17:36:56

标签: javascript unit-testing dojo amd intern

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>

如何在其他项目中包含这些外部文件?

2 个答案:

答案 0 :(得分:2)

也许我的想法太简单了,但我想起来就是这样:

  • project1是一个项目
  • project2是一个项目
  • intern_tests是一个项目

实现您想要实现的目标:

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);
        }
    });
});