当主机更改源时,grunt karma 对 vagrant 进行测试 grunt/karma 未检测到它

Posted

技术标签:

【中文标题】当主机更改源时,grunt karma 对 vagrant 进行测试 grunt/karma 未检测到它【英文标题】:grunt karma testing on vagrant when host changes sources grunt/karma doesn't detect it 【发布时间】:2014-07-07 10:04:30 【问题描述】:

这花了我很长时间才找到,但似乎无法找到解决方案。使用 vagrant 我运行了一个运行 grunt/karma 的 Fedora 20 客户机。我在主机上编辑的源代码,但是当我保存 grunt 时没有检测到更改,因此没有进行任何测试。

认为这是一个配置问题,所以在这里尝试了许多组合但没有成功。最后我打开了第二个 ssh 给来宾 vagrang ssh 并更改了另一个 ssh 终端 echo " " >> app/js/app.js 中的文件,看到现在 grunt/karma 检测到更改并再次运行测试。

由于它没有 x 窗口或任何东西,我正在使用 PhantomJS 运行测试。另一个问题是我必须在 httpd.conf 中设置 EnableSendfile off 以防止 Apache 在从共享中提供文本文件时发送垃圾(这是我在主机中的项目和来宾中的 Web 根目录)。我的猜测是可能需要对节点进行另一个设置,以便它检测主机对共享文件所做的更改。它正在使用 virtualBox 共享。

以前有没有人遇到过这种情况,有解决办法吗?似乎主机更改共享上的文件不会触发 grunt/karma 正在侦听以指示文件已更改的某些事件。

[更新]

尝试了 NFS 和 rsync 共享,但 NFS 根本不起作用,并且 rsync 似乎只是在启动时同步。

[更新]

作为临时解决方案,我必须手动告诉文件在 ssh 终端中更新:

#start grunt and give me back command:
grunt &
#when I update a file tell grunt it's updated
touch -d "now" test/unit/loginSpec.js

有趣的是,如果我更新 app/js/login.js 并告诉 grunt test/unit/loginSpec.js 已更新,它将再次运行测试,但使用旧 login.js 即使它已更改 cat app/js/login.js 也会显示更改。如果不是这样,解决方案将焦点设置到右侧窗口和 2 次击键(向上箭头并输入)

【问题讨论】:

听起来像是网络配置问题而不是编码问题……还是您正在编译自己的 grunt 分支? @BenVoigt 共享的实现方式肯定有问题。尽管如果主机更改文件,则可以在具有正确最后修改日期的客人上看到文件更改。只是 grunt watch (node) 没有检测到文件被更改。 您是否正在编写/修改实现共享的代码? @BenVoigt 来宾主持项目的 symfony 部分以及用于测试 angularjs 部分的 nodejs、grunt 和工具。主机用于编辑代码,因为它具有 IDE(netbeans)。共享是为了让我能够修改主机上的代码并让它立即在来宾上运行(标准 vagrant 设置)。 @BenVoigt 感谢您的回复。我不同意你的观点,因为 vagrant 是一个开发人员工具,共享的全部意义在于你可以在一台开发机器上为客户端/项目运行多个服务器配置:vagrantup.com 为此需要 Apache 和我怀疑 nodejs 有 grunt watch 工作。 Apache 部分已记录和提及,但找不到 grunt watch 部分,所以在这里询问。 【参考方案1】:

这源于 vboxsf(Virtualbox“分片文件夹”文件系统)同步中的一个已知错误,该问题的解决方案只能由 Virtualbox 团队实施。人们在使用 Gulp、Guard 或 Meteor.js(仅举几例)时遇到过类似的问题。

您可以使用一些解决方法……

自动rsync

Vagrant 1.5 有一个自动同步实用程序 (rsync-auto) 可以监视指定的文件夹,并在您实时进行更改时自动同步更改。它使用系统特定的 API 来检测文件更改,而不是轮询文件系统……

所以你应该在 vagrant 文件中定义你的共享。即:

config.vm.synced_folder ".", "/vagrant", type: "rsync"

并打开一个额外的终端会话运行:

$ vagrant rsync-auto

但是,仅此一项并不是最有效的选项。在这里您可以找到 gruntfilevagrant plugin,它们将帮助您使您的 rsync 运行得更快、更流畅...

希望对你有帮助!

【讨论】:

以上是关于当主机更改源时,grunt karma 对 vagrant 进行测试 grunt/karma 未检测到它的主要内容,如果未能解决你的问题,请参考以下文章

Karma start和grunt karma之间的区别:单位

grunt karma 覆盖在 jenkins 上失败,但在 windows/unix 上有效

使用 grunt 时找不到模块“业力”

Karma 无法捕获 PhantomJS

使用 karma 持续编译和运行我的咖啡脚本测试

Karma/Jasmine 在没有运行测试的情况下超时