对coffee.ERB文件的笑话测试

时间:2018-06-26 13:45:22

标签: ruby-on-rails webpack jestjs erb

在Rails项目中,我有一些包含ERB语法的JavaScript文件,即

// en_store.coffee.erb

EnStore =
  activities:
    title: 'Delete Note?'
    image: '<%= asset_path("crm/sections/en/calendar.png") %>'

module.exports.EnStore = EnStore

测试:

// en_store.test.coffee

import { EnStore } from 'stores/en_store'

describe 'EN Store', () ->

  // This test passes.
  it 'should provide hard typed translation', () ->
    expect(EnStore.activities.title).toBe('Delete Note?')

  // This one fails as the EnStore.activities.image contains '<%= asset_path("crm/sections/en/calendar.png") %>' as a string and not the actual interpolated value.
  it 'should provide asset path', () ->
    expect(EnStore.activities.image).toBe('[This is not interpolated]')

尝试用Jest测试它会导致错误,因为ERB部分没有被插值。在测试之外,这是由Webpack通过rails-erb-loader处理的。我如何使其与Jest一起使用?是否有任何现有的transform软件包可以让我做到这一点?

还是Jest的替代品,可以让我测试那些类型的文件?

1 个答案:

答案 0 :(得分:0)

由于您不需要.erb文件的babel支持或插件,因此没有简单的方法可以将源文件转换为jest可以使用的东西。

不过,有一些可行的选择。

1)将Webpack加载程序用作Babel插件

babel-plugin-webpack-loaders是Babel插件,旨在使用 webpack加载程序通过babel转换文件

这是jest's docs提到的针对基于非常规Webpack配置的项目的解决方案,但是该项目不再维护,并且仅与 webpack v1正式兼容 strong>。

2)编写一个Jests自定义转换器

Jest并没有提供现成的Webpack集成,而是通过transformers提供了源代码转换。

您可能会考虑基于writing a custom .erb transformerWebpack's Rails erb loader

3)将Jest和Webpack与第三方实用程序集成

即使Jest团队未jest-webpack正式支持,该项目也旨在将 Jest 与您现有的 Webpack配置集成。