Jest测试coffee.ERB文件

mrt*_*mrt 5 ruby-on-rails erb webpack jestjs

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

// en_store.coffee.erb

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

module.exports.EnStore = EnStore
Run Code Online (Sandbox Code Playgroud)

而且测试:

// 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]')
Run Code Online (Sandbox Code Playgroud)

尝试使用Jest测试它会导致错误,因为ERB部分未进行插值.在测试之外,这是由Webpack通过rails-erb-loader.如何让它与Jest一起使用?有没有现成的transform包可以让我这样做?

或者是否可以替代Jest让我测试那些类型的文件?

And*_*aro 0

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

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

1) 使用 webpack 加载器作为 Babel 插件

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

这是jest 文档中提到的针对基于重要 Webpack 配置的项目的解决方案,但该项目不再维护,并且仅与webpack v1正式兼容。

2) 编写 Jests 自定义变压器

Jest 不提供开箱即用的 webpack 集成,但通过Transformer提供源代码转换。

您可能会考虑编写一个.erb基于Webpack 的 Rails erb loader 的自定义转换器

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

即使没有得到 Jest 团队的正式支持, jest-webpack也是一个旨在将Jest与现有Webpack 配置集成的项目。