代码之家  ›  专栏  ›  技术社区  ›  Adam Zerner

如何使用Vue webpack项目测试一个文件(从命令行)?

  •  0
  • Adam Zerner  · 技术社区  · 7 年前

    see 你能跑吗 karma start 然后 karma run -- --grep=testDescriptionFilter 只对一个文件运行测试。然而,当我在一个使用Vue的项目中尝试这样做的时候 webpack template ,它不起作用。

    我试过编辑 files 数组输入 karma.conf.js ,希望能够以这种方式测试一个文件。通常数组如下所示:

    files: [
      '../../node_modules/jquery/dist/jquery.min.js',
      '../../node_modules/babel-polyfill/dist/polyfill.js',
      './index.js'
    ],
    

    以及 index.js 看起来像这样:

    import Vue from 'vue'
    
    Vue.config.productionTip = false
    
    // require all test files (files that ends with .spec.js)
    const testsContext = require.context('./specs', true, /\.spec$/)
    testsContext.keys().forEach(testsContext)
    
    // require all src files except main.js for coverage.
    // you can also change this to match only the subset of files that
    // you want coverage for.
    const srcContext = require.context('../../src', true, /^\.\/(?!main(\.js)?$)/)
    srcContext.keys().forEach(srcContext)
    

    首先,我尝试包含要测试的文件,而不是 ./index.js 像这样:

    files: [
      '../../node_modules/jquery/dist/jquery.min.js',
      '../../node_modules/babel-polyfill/dist/polyfill.js',
      './specs/players/OutcomeAnalyzerPlayer/setRangesAccordingToFilters/afterPreflop1/afterFlop1.spec.js'
    ],
    

    SyntaxError: Use of reserved word 'import'

    code/premium-poker-tools [master●] » npm run unit
    
    > premium-poker-tools@1.0.0 unit /Users/adamzerner/code/premium-poker-tools
    > BABEL_ENV=test karma start test/unit/karma.conf.js
    
    18 10 2018 12:25:49.014:WARN [karma]: No captured browser, open http://localhost:9876/
    18 10 2018 12:25:49.021:INFO [karma]: Karma v1.7.1 server started at http://0.0.0.0:9876/
    18 10 2018 12:25:49.022:INFO [launcher]: Launching browser PhantomJS with unlimited concurrency
    18 10 2018 12:25:49.026:INFO [launcher]: Starting browser PhantomJS
    18 10 2018 12:25:49.801:INFO [PhantomJS 2.1.1 (Mac OS X 0.0.0)]: Connected on socket 1jJ_7wJ0bOiMO299AAAA with id 58854798
    PhantomJS 2.1.1 (Mac OS X 0.0.0) ERROR
      SyntaxError: Use of reserved word 'import'
      at specs/players/OutcomeAnalyzerPlayer/setRangesAccordingToFilters/afterPreflop1/afterFlop1.spec.js:1
    
    PhantomJS 2.1.1 (Mac OS X 0.0.0): Executed 0 of 0 SUCCESS (0 secs / 0 secs)
    TOTAL: 0 SUCCESS
    

    我不知道我为什么会犯这个错误,但在仔细检查之后 文件,看起来这是必要的,如果我想指定只运行某个文件的规范,我必须在那里执行。所以我试着创造一个 set-ranges-according-to-filters.js 仅包含要测试的文件的文件,否则与

    import Vue from 'vue'
    
    Vue.config.productionTip = false
    
    // require all test files (files that ends with .spec.js)
    const testsContext = require.context('./specs/players/OutcomeAnalyzerPlayer/setRangesAccordingToFilters/afterPreflop1/afterFlop1.spec.js', true, /\.spec$/)
    testsContext.keys().forEach(testsContext)
    
    // require all src files except main.js for coverage.
    // you can also change this to match only the subset of files that
    // you want coverage for.
    const srcContext = require.context('../../src', true, /^\.\/(?!main(\.js)?$)/)
    srcContext.keys().forEach(srcContext)
    

    然后我更新了 文件夹 因果报应.conf.js :

    files: [
      '../../node_modules/jquery/dist/jquery.min.js',
      '../../node_modules/babel-polyfill/dist/polyfill.js',
      './set-ranges-according-to-filters.js'
    ],
    

    code/premium-poker-tools [master●] » npm run unit
    
    > premium-poker-tools@1.0.0 unit /Users/adamzerner/code/premium-poker-tools
    > BABEL_ENV=test karma start test/unit/karma.conf.js
    
    18 10 2018 12:30:35.072:WARN [karma]: No captured browser, open http://localhost:9876/
    18 10 2018 12:30:35.087:INFO [karma]: Karma v1.7.1 server started at http://0.0.0.0:9876/
    18 10 2018 12:30:35.087:INFO [launcher]: Launching browser PhantomJS with unlimited concurrency
    18 10 2018 12:30:35.119:INFO [launcher]: Starting browser PhantomJS
    18 10 2018 12:30:35.937:INFO [PhantomJS 2.1.1 (Mac OS X 0.0.0)]: Connected on socket 5-U0Mca0_Vgr07-rAAAA with id 87593561
    PhantomJS 2.1.1 (Mac OS X 0.0.0) ERROR
      SyntaxError: Use of reserved word 'import'
      at set-ranges-according-to-filters.js:1
    
    PhantomJS 2.1.1 (Mac OS X 0.0.0): Executed 0 of 0 SUCCESS (0 secs / 0 secs)
    TOTAL: 0 SUCCESS
    

    最好,我希望能够从命令行测试一个文件,比如 karma start --file-path-to-my-file . 但如果不可能的话 因此,它只运行我的文件的测试将是一个很好的安慰。

    1 回复  |  直到 7 年前
        1
  •  1
  •   Adam Zerner    7 年前

    通过编辑 test/unit/index.js

    测试/单元/索引.js . 以下代码

    import Vue from 'vue'
    
    Vue.config.productionTip = false
    
    // require all test files (files that ends with .spec.js)
    const testsContext = require.context('./specs/players/OutcomeAnalyzerPlayer/setRangesAccordingToFilters/afterPreflop1', true, /afterFlop1\.spec\.js/)
    testsContext.keys().forEach(testsContext)
    
    // require all src files except main.js for coverage.
    // you can also change this to match only the subset of files that
    // you want coverage for.
    const srcContext = require.context('../../src', true, /^\.\/(?!main(\.js)?$)/)
    srcContext.keys().forEach(srcContext)
    

    请注意,我最初尝试使用 require.context - require.context('./specs/players/OutcomeAnalyzerPlayer/setRangesAccordingToFilters/afterPreflop1/afterFlop1.spec.js', true, /\.spec$/) -不会有用的。第一个论点是 ,不是文件。第二个参数是指示是否也应该搜索子目录的标志,第三个参数是匹配文件的正则表达式。


    我最初试图创建一个不同的文件来代替 并将其包含在 files 而不是 ./index.js . 为什么我得到 SyntaxError: Use of reserved word 'import' 错误是因为 import preprocessors 数组输入 karma.conf.js

    files: [
      '../../node_modules/jquery/dist/jquery.min.js',
      '../../node_modules/babel-polyfill/dist/polyfill.js',
      // './index.js'
      './set-ranges-according-to-filters.js'
    ],
    preprocessors: {
      './index.js': ['webpack', 'sourcemap'],
      './set-ranges-according-to-filters.js': ['webpack', 'sourcemap']
    },
    

    直接将文件包含在 文件夹

    直接将文件包含在 文件夹 数组而不是

    files: [
      '../../node_modules/jquery/dist/jquery.min.js',
      '../../node_modules/babel-polyfill/dist/polyfill.js',
      // './index.js'
      '../../src/services/monkey-patches.js',
      './specs/players/OutcomeAnalyzerPlayer/setRangesAccordingToFilters/afterPreflop1/afterFlop1.spec.js'
    ],
    

    不过,有两个警告(我可以想到):

    1) 使用 包括其他规范和src文件。直接添加文件而不是使用 /索引.js ,其他文件无法加载,这可能会导致文件损坏。对我来说是这样的,我不得不在这个过程中添加一些东西 文件夹 在我的规范前面排列,让它工作。

    2) 我需要添加以下内容到 数组:

    preprocessors: {
      // './index.js': ['webpack', 'sourcemap'],
      '../../src/services/monkey-patches.js': ['webpack', 'sourcemap'],
      './specs/players/OutcomeAnalyzerPlayer/setRangesAccordingToFilters/afterPreflop1/afterFlop1.spec.js': ['webpack', 'sourcemap']
    },
    

    使用命令行

    karma run -- --grep=testDescriptionFilter approach 工作。当我跑的时候 karma run --help karma start --help ,我看不到任何运行特定文件测试的选项。

    package.json 使用不同的配置文件运行测试。如。 karma-1.conf.js 将运行的测试 file-1.spec.js npm run unit-1 karma start test/unit/karma-1.conf.js :

    {
      "scripts": {
        "unit-1": "karma start test/unit/karma-1.conf.js"
      }
    }
    
    推荐文章