我有一个项目,其中实习单元测试应该在与测试中的源代码不同的目录树中。有点像这样:
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 Server(使用runner.js)启动时,Selenium启动的浏览器中运行的client.html无法找到外部依赖项。在上面的示例中,它尝试在http://localhost:9000/__intern/src/ExternalDep.js
请求ExternalDep,这是404,因为src
目录不在实习生中。
我想如果我将intern.js放在测试和源代码的最高公共超级目录中,它就会起作用。但是我们的项目目前以一种不切实际的方式建立。有没有办法配置超出Intern配置文件位置的源,或者我只是犯了一个愚蠢的错误?
谢谢!
答案 0 :(得分:1)
将测试放在与其余代码不同的目录中没有问题,但projectRoot
需要是启动运行器的工作目录,并且需要更改加载器配置以匹配
所以,而不是现在从projectRoot/tests
开始实习生,就像这样:
…/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' }
]
},