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

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

var myTimer = ; 

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

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

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

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

我不知道怎么做你问的。 但您可以考虑将myTimer设置为您希望它在特征规范中所需的值,并将其作为特定值。

假设您正在使用Capybara,您可以在function规范中运行Javascript

 page.execute_script('// some Javascript') 

您可能需要先重新排列Javascript,然后将myTimer放在脚本可以更改的位置。