在RSpec自动化测试期间使Sprockets缓存无效

Cod*_*ith 5 ruby rspec ruby-on-rails sprockets

在我的Rails应用程序中,我有一个.js.erb文件,它有一个变量,它根据一些Ruby代码动态设置.

var myTimer = <%= MyApp.config.timeout_time * 1000 %>;
Run Code Online (Sandbox Code Playgroud)

该应用程序工作正常,但我在一些自动化测试中遇到问题.在与此JavaScript一起使用的RSpec功能测试中会出现此问题.我的spec文件有许多测试可以动态改变ruby MyApp.config.timeout_time时间来测试不同的场景.在我的spec文件中,第一个示例通过,其余示例失败.

我终于意识到这种情况正在发生,因为myTimer从来没有在JavaScript方面得到更新.当第一个测试运行时,JavaScript将使用当前在Ruby中设置的值进行编译.当我为第二次测试更改Ruby计时器时,RSpec仍在使用JavaScript中的先前值.

有没有办法告诉Sprockets/Rails使文件或缓存的一部分无效,以便重建JavaScript? 我不想一般地关闭缓存,我只需要一种方法在需要时基于每个测试使application.js无效.

我可能能够"触摸"文件系统上的一个JavaScript文件,使sprocket认为文件已被更改,但我真的不想这样做.

Dav*_*uth 1

我不知道该怎么做你要求的。但是您可以考虑将myTimer其设置为您希望在需要它为特定值的功能规范中设置的值。

假设您使用的是 Capybara,您可以在功能规范中运行 Javascript

page.execute_script('// some Javascript')
Run Code Online (Sandbox Code Playgroud)

您可能需要先重新安排一下 Javascript,将其放置myTimer在脚本可以更改的位置。