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

时间:2016-08-09 22:01:46

标签: ruby-on-rails ruby rspec sprockets

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

var myTimer = <%= MyApp.config.timeout_time * 1000 %>;

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

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

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

我或许能够触摸&#34;文件系统上的一个JavaScript文件使sprocket认为文件已被更改,但我并不是真的想要这样做。

1 个答案:

答案 0 :(得分:1)

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

假设您正在使用Capybara,您可以使用

在功能规范中运行Javascript
page.execute_script('// some Javascript')

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