【问题标题】:Error importing Node.js modules into Intern tests将 Node.js 模块导入实习生测试时出错
【发布时间】:2015-12-05 01:31:50
【问题描述】:

我正在试用 Intern 来测试我们的 Node.js 模块。我已经将它设置为运行一个空测试甚至require 节点模块,但是当我尝试require 我们包中的一个模块时,我得到了错误:

/path/to/app/node_modules/path/path.js:327
  var path = (i >= 0) ? arguments[i] : process.cwd();
                                               ^
TypeError: undefined is not a function
  at Object.exports.resolve (/path/to/app/node_modules/path/path.js:327:52)
  at Object.exports.relative (/path/to/app/node_modules/path/path.js:405:20)
  at getSource (/path/to/app/node_modules/intern/lib/util.js:368:21)
  at formatLine (/path/to/app/node_modules/intern/lib/util.js:405:40)
  at processChromeTrace (/path/to/app/node_modules/intern/lib/util.js:418:16)
  at normalizeStackTrace (/path/to/app/node_modules/intern/lib/util.js:470:38)
  at Object.getErrorMessage (/path/to/app/node_modules/intern/lib/util.js:597:14)
  at PreExecutor._handleError (/path/to/app/node_modules/intern/lib/executors/PreExecutor.js:256:24)
  at /path/to/app/node_modules/intern/node_modules/dojo/lang.js:78:32
  at process.<anonymous> (/path/to/app/node_modules/intern/lib/executors/PreExecutor.js:302:6)

文件夹结构为:

  • 源/
    • **/*.coffee
  • 测试
    • unit/**/*.coffee
    • intern.js
  • js/ (coffeescript在这里编译)
    • 源/
      • **/*.js
    • 测试/
      • **/*.js
      • all.js(通过在/js/tests下汇总其他测试的名称来编译)
  • node_modules

这是我的实习生.js:

define({
  capabilities: {
    'browserstack.selenium_version': '2.45.0'
  },

  environments: [
    {browserName: 'internet explorer', version: '11', platform: 'WIN8'},
    {browserName: 'internet explorer', version: '10', platform: 'WIN8'},
    {browserName: 'internet explorer', version: '9', platform: 'WINDOWS'},
    {browserName: 'firefox', version: '37', platform: ['WINDOWS', 'MAC']},
    {browserName: 'chrome', version: '39', platform: ['WINDOWS', 'MAC']},
    {browserName: 'safari', version: '8', platform: 'MAC'}
  ],

  maxConcurrency: 2,
  tunnel: 'BrowserStackTunnel',
  loaderOptions: {
    packages: [{name: 'app', location: 'js/src'}]
  },
  reporters: ['Console', 'Lcov'],
  suites: ['js/tests/unit/all'],
  excludeInstrumentation: /^(?:\.npm|js\/tests|src|tests|node_modules)\//
});

我的测试只是:

define (require) ->
  registerSuite = require('intern!object')
  assert = require('intern/chai!assert')
  SchemaBuilder = require('intern/dojo/node!app/path/to/Module')

  registerSuite
    name: 'Testing'

    'test': ->

从我正在运行的项目根目录'./node_modules/.bin/intern-client config=tests/intern'

这是我的代码、配置、环境或实习生的问题吗?

我已经尝试过使用 Node.js v0.12.0 和 v0.12.7。

【问题讨论】:

    标签: node.js intern


    【解决方案1】:

    有趣的是,从我的应用程序依赖项 (package.json) 中删除 path 模块解决了(好吧,避免了)undefined is not a function 错误,似乎回到了 Intern 自己的路径解析。我真的不知道为什么,但这似乎是一个错误。

    这提出了一个新的、更易于处理的错误:Error: Cannot find module 'app/path/to/Module',表明 require() 中的路径完全错误。

    我认为问题在于intern/dojo/node 加载程序不支持loaderOptions: {packages: [{name: 'app', location: 'js/src'}]} 配置,因此它正在搜索与测试模块相关的app 目录。如果我将app/ 替换为../../../../js/src/,那么它会解决并按预期工作。

    有点难看,但这是在 node 中要求本地文件的标准方式,所以也不足为奇,我只是希望 Intern 的 loader 可以让它更干净。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-04
      • 1970-01-01
      • 1970-01-01
      • 2021-08-21
      • 1970-01-01
      • 2023-03-04
      相关资源
      最近更新 更多