Sim, você está certo. O principal problema jasmine-gem
é que ele não canaliza as especificações através do babel. Deixe-me postar a solução mais rápida para o seu problema e, depois disso, pensarei na possível implementação de uma abordagem semelhante no jasmine-gem
.
A idéia principal é canalizar as especificações através do webpack rails, desde que ele tenha todas as configurações necessárias de babel.
- Instale,
jasmine-core
pois não usaremos jasmine-gem
nesta solução
yarn add jasmine-core -D
Agora crie dois pacotes webpack adicionais. Um é para Jasmine e conterá apenas Jasmine e o executor de teste
// app/javascript/packs/jasmine.js
import 'jasmine-core/lib/jasmine-core/jasmine.css'
import 'jasmine-core/lib/jasmine-core/jasmine-html.js'
import 'jasmine-core/lib/jasmine-core/boot.js'
import 'jasmine-core/images/jasmine_favicon.png'
E o segundo para o código do aplicativo e as especificações
// app/javascript/packs/specs.js
// First load your regular JavaScript (copy all the JavaScript imports from your main pack).
let webpackContext = require.context('../javascripts', true, /\.js(\.erb)?$/)
for(let key of webpackContext.keys()) { webpackContext(key) }
// Then load the specs
let specsContext = require.context('../spec', true, /\.js(\.erb)?$/)
for(let key of specsContext.keys()) { specsContext(key) }
Preste atenção aos seus '../javascripts'
e '../spec'
caminhos. Para mim, parecia '../../assets/javascripts'
e '../../../spec'
respeitosamente.
Em seguida, adicione o Webpack ProvidePlugin for Jasmine (adicione este código a config/webpack/environment.js
)
// config/webpack/environment.js
const webpack = require('webpack')
environment.plugins.prepend('Provide', new webpack.ProvidePlugin({
jasmineRequire: 'jasmine-core/lib/jasmine-core/jasmine.js',
}))
Adicione a página do Jasmine runner ao seu aplicativo
# config/routes.rb
Rails.application.routes.draw do
# ...
if Rails.env.development? || Rails.env.test?
get 'jasmine', to: 'jasmine#index'
end
end
# app/controllers/jasmine_controller.rb
class JasmineController < ApplicationController
layout false
def index
end
end
# app/views/jasmine/index.html.haml
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<%= stylesheet_pack_tag 'jasmine', :media => 'all' %>
</head>
<body>
<%= javascript_pack_tag 'jasmine' %>
<%= javascript_pack_tag 'specs' %>
</body>
</html>
- Agora seu Jasmine deve funcionar na
/jasmine
rota
Esta resposta foi preparada com base neste post . No entanto, verifiquei novamente as instruções no ruby 2.6.3, rails 6.0.2, adicionei alterações apropriadas às recomendações e provamos que isso funciona.
Por favor, deixe-me saber se minha resposta foi útil para você ou se você precisa de mais informações. No entanto, vou trabalhar em uma solução que terá êxito com jasmine
gem ou implementação semelhante.