草庐IT

javascript - Karma --auto-watch 不再有效

coder 2024-05-05 原文

我的 Karma 安装用于自动观看 - 当我保存 .js 文件时,它会重新运行测试。自从我做任何 JavaScript 以来已经有几个月了,现在我再次使用它,自动监视功能不起作用。这是我的 karma.conf:

module.exports = function (config) {
    config.set({

        // base path that will be used to resolve all patterns (eg. files, exclude)
        basePath: '../',


        // frameworks to use
        // available frameworks: https://npmjs.org/browse/keyword/karma-adapter
        frameworks: ['jasmine'],


        // list of files / patterns to load in the browser
        files: [
          'jQuery/jquery-1.10.2.js',
          'jasmine/jasmine.js',
          'jasmine-jquery/jasmine-jquery.js',
          'Angular/angular.js',
          'Angular/angular-route.js',
          'Angular/angular-mocks.js',
          'Angular/angular-animate.min.js',
          'Angular/angular-sanitize.min.js',
          'Angular/angular-cache.min.js',
          'emcommon.js',
          'Moment/moment.js',
          'ViewModels/Common/*.js',
          'ViewModels/Settings/*.js',
          'Tests/Common/*.js',
          'Tests/Settings/*.js',
        ],

        // list of files to exclude
        exclude: [
        ],


        // preprocess matching files before serving them to the browser
        // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor
        preprocessors: {
            '../ViewModels/**/*.js': 'coverage'
        },


        // test results reporter to use
        // possible values: 'dots', 'progress'
        // available reporters: https://npmjs.org/browse/keyword/karma-reporter
        reporters: ['progress', 'coverage'],

        coverageReporter: {
            type: 'html',
        },

        // web server port
        port: 9876,


        // enable / disable colors in the output (reporters and logs)
        colors: true,


        // level of logging
        // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG
        logLevel: config.LOG_INFO,


        // enable / disable watching file and executing tests whenever any file changes
        autoWatch: true,
        usePolling: true,


        // start these browsers
        // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher
        browsers: ['Chrome'],

        // Continuous Integration mode
        // if true, Karma captures browsers, runs the tests and exits
        singleRun: false
    });
};

我已阅读并遵循建议 here .我试过设置usePolling为真。我使用了三个不同的程序来保存文件(VS、Sublime 和记事本)以排除这种情况。如果我停止 Karma 并重新启动它,它会获取更改并且它们按预期通过/失败,但它在运行时不会看到文件更改。

从 Karma 0.12.7 迁移到 0.13.0 对问题没有影响。

最佳答案

输出在哪里?

首先,我认为使用以下 CLI 选项查看运行的输出会有所帮助:

# add --single-run, or kill the process manually when finished.
karma start karma.conf.js --auto-watch --log-level debug > log.txt

然后粘贴log.txt的内容到 pastebin .对您的问题进行编辑可能太大了。

一个不同的浏览器,也许?

我也会尝试运行与 Chrome 不同的浏览器, 我不排除这可能是 karma-runner#895 中每个示例的问题原因显示 Chrome作为首选的浏览器(尽管这是一个老问题,并通过它的外观解决)。

用 PhantomJS 和/或 Chrome Canary 试试看,看看能不能解决问题。

和任务执行者一起去吗?

您是否有机会将任务运行器作为本地设置的一部分?
如果是这样,您可以杀死 --auto-watch并在您选择的任务运行器中使用等效的解决方案。
  • gulp-watch
  • gulp-karma
  • grunt-contrib-watch
  • grunt-karma

  • 我们设置 grunt 任务的方式如下:
    karma: {
      options: {
        configFile: 'karma.conf.js'
      },
      watch: {
        background: false,
        singleRun: false
      }
    }
    

    使用以下 karma.conf 设置:
    module.exports = function(config) {
      config.set({
        frameworks: ['mocha'],
        basePath: '',
        files: [ /** redacted **/ ],
        urlRoot: '/base/app/',
        reporters: ['progress'],
        logLevel: config.LOG_INFO,
        browsers: ['PhantomJS'],
        singleRun: true
      });
    };
    

    尝试使用 sudo 运行?

    空白板配置

    运行karma init newconf.js ,然后试一试:
    karma start newconf.js --auto-watch
    

    我认为看到你的测试的一些输出在这里会很有帮助。最好是一些版本号:
  • Chrome
  • NodeJS
  • karma
  • 测试框架(Mocha/Chai、Jasmine)


  • 编辑#1

    请使用如下所示的 karma.conf:
    module.exports = function (config) {
      config.set({
        basePath: '',
        frameworks: ['jasmine'],
        files: [
          'some_jasmine_spec.js',
        ],
        reporters: ['progress'],
        port: 9000,
        colors: true,
        logLevel: config.LOG_DEBUG,
        autoWatch: true,
        browsers: ['Chrome'],
        singleRun: false
      });
    };
    
    some_jasmine_spec.js文件看起来像这样:
    describe('dummy_test', function() {
      it('just runs', function() {
        expect(true).to.be.false;
      });
    });
    

    some_jasmine_spec.js文件在与此剥离 karma.conf 相同的文件夹中,看看它是否会产生不同的结果。

    编辑#2

    我刚刚注意到您的 files 中的最后一行数组没有被读取。
    如果您查看第一个日志文件的输出:
    # The last DEBUG [watcher] entry
    # 27 - [36m17 07 2015 14:35:37.160:DEBUG [watcher]: [39mWatching "c:/Projects/Gazelle - EstateManager/DEV-Container/(9112) ViewDevice/EstateManagerUI/EstateManagerUI/Scripts/Tests/Settings"
    
    # The last DEBUG [web-server] entry
    # 102 - [36m17 07 2015 14:35:38.321:DEBUG [web-server]: [39mserving (cached): c:/Projects/Gazelle - EstateManager/DEV-Container/(9112) ViewDevice/EstateManagerUI/EstateManagerUI/Scripts/Tests/Settings/viewschedulemodule.tests.js
    

    因此,./*/*.js 中没有任何文件。模式正在被读取。

    我会尝试将其更改为 ./**/*.js , 甚至 **/*.js .

    即便如此,如果虚拟 Jasmine 测试与未包含的文件相关,它应该已经完成​​了。

    编辑#3

    这里的想法很少,但是;

    我会尝试更改 basePath../并删除 ../从所有其他文件引用。这更像是对我(发痒的)好奇心的搔痒,而不是“有效”的担忧。但是,嘿,尝试并没有什么坏处。

    编辑#4

    最后的努力;弹出一个终端并运行以下命令(对不起,我在一个基于 UNIX 的系统上 - 我的 MS-DOS 没有达到标准,可以这么说......)。让我们把它全部清理掉,杀掉缓存,重新安装你需要的包,然后再试一次。

    清理/退出
  • $ rm -rf node_modules # clean out your local node modules
  • $ npm cache clean # clean out the npm cache
  • $ npm uninstall karma karma-cli karma-chrome-launcher karma-coverage karma-firefox-launcher karma-ie-launcher karma-jasmine jasmine -g # uninstall assorted karma/jasmine libraries globally

  • 备份
  • $ mv karma.conf.js karma.conf.bak.js # backup your karma.conf

  • 重装
  • $ npm install karma karma-cli karma-chrome-launcher karma-coverage karma-firefox-launcher karma-ie-launcher karma-jasmine jasmine -g # reinstall assorted karma/jasmine libraries globally
  • $ npm install # reinstall your local node modules

  • 重新初始化
  • $ karma init # initialise a new karma.conf.js file
  • 对新的 karma.conf.js 文件
  • 进行尽可能少的修改
  • $ karma start karma.conf.js --auto-watch --log-level debug
  • 可选地,将上述内容通过管道传输到新的 log.txt并上传。
  • 这样我们就可以比较两者,看看有没有什么 真的脱颖而出。

  • 调试

    确保 singleRun设置为 false在新的 karma.conf.js 文件中,然后弹出打开连接的浏览器并转到 http://localhost:9876 .

    按下调试按钮,打开您的开发工具(网络检查器/控制台),并调查重新加载页面时会发生什么。

    如果这没有任何区别,我很茫然。

    关于javascript - Karma --auto-watch 不再有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31428916/

    有关javascript - Karma --auto-watch 不再有效的更多相关文章

    1. ruby-on-rails - 'compass watch' 是如何工作的/它是如何与 rails 一起使用的 - 2

      我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t

    2. ruby - 如何进行排列以有效地定制输出 - 2

      这是一道面试题,我没有答对,但还是很好奇怎么解。你有N个人的大家庭,分别是1,2,3,...,N岁。你想给你的大家庭拍张照片。所有的家庭成员都排成一排。“我是家里的friend,建议家庭成员安排如下:”1岁的家庭成员坐在这一排的最左边。每两个坐在一起的家庭成员的年龄相差不得超过2岁。输入:整数N,1≤N≤55。输出:摄影师可以拍摄的照片数量。示例->输入:4,输出:4符合条件的数组:[1,2,3,4][1,2,4,3][1,3,2,4][1,3,4,2]另一个例子:输入:5输出:6符合条件的数组:[1,2,3,4,5][1,2,3,5,4][1,2,4,3,5][1,2,4,5,3][

    3. python - 是否可以使用 Ruby 或 Python 禁用 anchor /引用来发出有效的 YAML? - 2

      是否可以在PyYAML或Ruby的Psych引擎中禁用创建anchor和引用(并有效地显式列出冗余数据)?也许我在网上搜索时遗漏了一些东西,但在Psych中似乎没有太多可用的选项,而且我也无法确定PyYAML是否允许这样做.基本原理是我必须序列化一些数据并将其以可读的形式传递给一个不是真正的技术同事进行手动验证。有些数据是多余的,但我需要以最明确的方式列出它们以提高可读性(anchor和引用是提高效率的好概念,但不是人类可读性)。Ruby和Python是我选择的工具,但如果有其他一些相当简单的方法来“展开”YAML文档,它可能就可以了。 最佳答案

    4. ruby - 未定义的方法 auto_upgrade!将 Sinatra/DataMapper 应用程序推送到 Heroku 时 - 2

      有谁知道在Heroku的Bamboo堆栈上启动并运行使用DataMapper的Sinatra应用程序所需的魔法咒语?Bamboo堆栈不包含任何预安装的系统gem,无论我尝试使用何种gem组合,我都会不断收到此错误:undefinedmethod`auto_upgrade!'forDataMapper:Module(NoMethodError)这是我的.gems文件中的内容:sinatrapgdatamapperdo_postgresdm-postgres-adapter这些是我将应用程序推送到Heroku时安装的依赖项:----->Herokureceivingpush----->Si

    5. ruby-on-rails - 使用 javascript 更改数据方法不会更改 ajax 调用用户的什么方法? - 2

      我遇到了一个非常奇怪的问题,我很难解决。在我看来,我有一个与data-remote="true"和data-method="delete"的链接。当我单击该链接时,我可以看到对我的Rails服务器的DELETE请求。返回的JS代码会更改此链接的属性,其中包括href和data-method。再次单击此链接后,我的服务器收到了对新href的请求,但使用的是旧的data-method,即使我已将其从DELETE到POST(它仍然发送一个DELETE请求)。但是,如果我刷新页面,HTML与"new"HTML相同(随返回的JS发生变化),但它实际上发送了正确的请求类型。这就是这个问题令我困惑的

    6. ruby - 为什么这个救援语法有效? - 2

      好的,所以我有了我正在使用的应用程序的这种方法,它可以在生产中使用。我的问题为什么这行得通?这是新的Ruby语法吗?defeditload_elements(current_user)unlesscurrent_user.role?(:admin)respond_todo|format|format.json{render:json=>@user}format.xml{render:xml=>@user}format.htmlendrescueActiveRecord::RecordNotFoundrespond_to_not_found(:json,:xml,:html)end

    7. ruby - 在 Mechanize 中使用 JavaScript 单击链接 - 2

      我有这个:AccountSummary我想单击该链接,但在使用link_to时出现错误。我试过:bot.click(page.link_with(:href=>/menu_home/))bot.click(page.link_with(:class=>'top_level_active'))bot.click(page.link_with(:href=>/AccountSummary/))我得到的错误是:NoMethodError:nil:NilClass的未定义方法“[]” 最佳答案 那是一个javascript链接。Mechan

    8. ruby - 奇怪的 ruby​​ for 循环行为(为什么这样做有效) - 2

      defreverse(ary)result=[]forresult[0,0]inaryendresultendassert_equal["baz","bar","foo"],reverse(["foo","bar","baz"])这行得通,我想了解原因。有什么解释吗? 最佳答案 如果我使用each而不是for/in重写它,它看起来像这样:defreverse(ary)result=[]#forresult[0,0]inaryary.eachdo|item|result[0,0]=itemendresultendforainb基本上就

    9. arrays - 在两个数组中查找不相交元素的有效方法是什么? - 2

      我有以下数组:A=[1,2,3,4,5]B=[2,6,7,1]我想找到不相交的元素,如下:output=[3,4,5,6,7]我是这样实现的,output=A+B-(A&B)但它效率低下,因为我添加了两个数组,然后删除了公共(public)元素。它类似于查找不相交的元素。我能做得比这更好吗?如果是,怎么办? 最佳答案 如何只选择A中的元素而不是B中的元素以及B中的元素而不是A中的元素。(A-B)+(B-A) 关于arrays-在两个数组中查找不相交元素的有效方法是什么?,我们在Stack

    10. ruby - 为什么 `middleman serve` 有效,但是 `middleman build` 编译这个 Sass 失败? - 2

      当我刚刚运行middleman时服务,all.css编译得很好,只包含对+box-shadow(none)的调用:/*line1,/home/yang/asdf/source/stylesheets/content.css.sass*/div{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;}但是当我构建网站时,我得到了这个Sass/Compass错误:$middlemanbuildSlim::EmbeddedEngineisdeprecated,itiscalledSlim::EmbeddedinSlim2.0

    随机推荐