我有一个项目,其中实习生单元测试应该与被测源代码位于不同的目录树中。有点像这样:

projectRoot
projectRoot/src
projectRoot/tests
projectRoot/tests/intern.js
projectRoot/tests/node_modules/intern
projectRoot/tests/MyTestSuite.js

在Intern配置文件中,我定义了一个AMD软件包,该软件包使用带有../的相对路径来从单元测试套件中获取src。这是一个示例配置:
define({
  environments: [ { browserName: 'chrome', platform: 'WINDOWS' }],
  webdriver: { host: 'localhost', port: 4444 },
  useSauceConnect: false,
  loader: {
    packages: [
          { name: 'testSuites', location: '.' },
          { name: 'externalDep', location: '../src' }
        ]
  },
  suites: [ 'testSuites/MyTestSuite' ]
});

以及配套的单元测试套件
define([ "intern!tdd", "intern/chai!assert","externalDep/ExternalDep"],
  function(tdd, assert, ExternalDep) {
    tdd.suite("Suite that has external dependency", function() {
      tdd.test("Test if external dependency is loaded correctly", function() {
        assert(ExternalDep === "hello");
      });
    });
  }
);

直接在浏览器(client.html)或节点(client.js)中进行测试时,此方法工作正常。但是,当通过Selenium服务器(带有Runner.js)启动时,在由Selenium启动的浏览器中运行的client.html找不到外部依赖项。在上面的示例中,它尝试在http://localhost:9000/__intern/src/ExternalDep.js(它是404)上请求ExternalDep,因为src目录不在内部。

我想如果将intern.js放在测试和源代码的最高公共(public) super 目录中,它将可以正常工作。但是我们的项目目前以某种方式设置,因此不切实际。有没有一种方法可以配置超出Intern配置文件位置的源,还是我犯了一个愚蠢的错误?

谢谢!

最佳答案

将测试与其余代码放在不同的目录中是没有问题的,但是projectRoot必须是启动运行程序的工作目录,并且需要更 retrofit 入程序配置以匹配。

因此,不是像现在这样从projectRoot/tests启动Intern的地方:

…/projectRoot/tests$ ./.bin/intern-runner config=intern

您需要从projectRoot启动它:
…/projectRoot$ ./tests/.bin/intern-runner config=tests/intern

…并更改您的加载程序配置:

  loader: {
    packages: [
          { name: 'testSuites', location: 'tests' },
          { name: 'externalDep', location: 'src' }
        ]
  },

关于intern - 通过Selenium运行测试时,将依赖项加载到Intern目录之外,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22842469/

10-12 16:44