Vâng bạn đã đúng. Vấn đề chính jasmine-gem
là nó không dẫn thông số kỹ thuật qua babel. Hãy để tôi đăng giải pháp nhanh nhất cho vấn đề của bạn và sau đó, tôi sẽ nghĩ đến việc thực hiện có thể của một cách tiếp cận tương tự jasmine-gem
.
Ý tưởng chính là dẫn các thông số kỹ thuật qua gói web rails miễn là nó có tất cả các cấu hình babel cần thiết.
- Cài đặt
jasmine-core
vì chúng tôi sẽ không sử dụng jasmine-gem
trong giải pháp này
yarn add jasmine-core -D
Bây giờ tạo hai gói webpack bổ sung. Một là cho Jasmine và sẽ chỉ chứa Jasmine và người chạy thử
// 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'
Và cái thứ hai cho mã ứng dụng của bạn và thông số kỹ thuật
// 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) }
Hãy chú ý đến '../javascripts'
và '../spec'
con đường của bạn . Đối với tôi nó giống như '../../assets/javascripts'
và '../../../spec'
tôn trọng.
Sau đó thêm Webpack ProvPlugin cho Jasmine (thêm mã này vào 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',
}))
Thêm trang Jasmine ranner vào ứng dụng của bạn
# 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>
- Bây giờ Jasmine của bạn nên làm việc trên
/jasmine
tuyến
Câu trả lời này được chuẩn bị dựa trên bài đăng này , tuy nhiên, tôi đã kiểm tra lại các hướng dẫn về ruby 2.6.3, rails 6.0.2, thêm các thay đổi phù hợp vào các khuyến nghị và chứng minh rằng điều này hoạt động.
Xin vui lòng, cho tôi biết nếu câu trả lời của tôi là hữu ích cho bạn hoặc bạn cần một số thông tin bổ sung. Tuy nhiên, tôi sẽ thực hiện một giải pháp sẽ thành công với jasmine
đá quý hoặc triển khai tương tự.