通过Selenium运行测试时,在Intern目录之外加载依赖项

joe*_*doe 6 intern

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

projectRoot
projectRoot/src
projectRoot/tests
projectRoot/tests/intern.js
projectRoot/tests/node_modules/intern
projectRoot/tests/MyTestSuite.js
Run Code Online (Sandbox Code Playgroud)

在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' ]
});
Run Code Online (Sandbox Code Playgroud)

还有一个匹配的单元测试套件

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");
      });
    });
  }
);
Run Code Online (Sandbox Code Playgroud)

直接在浏览器(client.html)或节点(client.js)中测试时,这种方法很有效.但是,当通过Selenium Server(使用runner.js)启动时,Selenium启动的浏览器中运行的client.html无法找到外部依赖项.在上面的示例中,它尝试请求ExternalDep at http://localhost:9000/__intern/src/ExternalDep.js,这是404,因为该src目录不在实习生中.

我想如果我把intern.js放在测试和源代码的最高公共超级目录中,它就可以了.但是我们的项目目前以一种不切实际的方式建立.有没有办法配置超出Intern配置文件位置的源,或者我只是犯了一个愚蠢的错误?

谢谢!

C S*_*ver 1

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

\n\n

所以,而不是现在你开始实习的地方projectRoot/tests这样开始实习:

\n\n
\xe2\x80\xa6/projectRoot/tests$ ./.bin/intern-runner config=intern\n
Run Code Online (Sandbox Code Playgroud)\n\n

你需要从projectRoot

\n\n
\xe2\x80\xa6/projectRoot$ ./tests/.bin/intern-runner config=tests/intern\n
Run Code Online (Sandbox Code Playgroud)\n\n

\xe2\x80\xa6 并更改您的加载器配置:

\n\n
\xe2\x80\xa6/projectRoot/tests$ ./.bin/intern-runner config=intern\n
Run Code Online (Sandbox Code Playgroud)\n