Saya menggunakan speech-rule-engine untuk menghasilkan teks bahasa Inggris dari MathML. Saat mencoba memutakhirkan dari v3.1.1 ke v3.2.0 saya melihat tes gagal karena alasan yang tidak saya mengerti.

Saya membuat proyek dua file sederhana yang menggambarkan masalah ini:

Package.json

{
  "name": "failure-example",
  "license": "UNLICENSED",
  "private": true,
  "engines": {
    "node": "14.15.5",
    "npm": "6.14.11"
  },
  "scripts": {
    "test": "jest"
  },
  "dependencies": {
    "speech-rule-engine": "3.2.0"
  },
  "devDependencies": {
    "jest": "^26.6.3"
  },
  "jest": {
    "notify": false,
    "silent": true,
    "verbose": true
  }
}

Contoh.tes.js

const sre = require('speech-rule-engine');

beforeAll(() => {
    sre.setupEngine({
        domain: 'mathspeak'
    });
});

test('simple single math', () => {
    expect(JSON.parse(JSON.stringify(sre.engineSetup(), ['domain', 'locale', 'speech', 'style'])))
        .toEqual({
            locale: 'en',
            speech: 'none',
            style: 'default',
            domain: 'mathspeak',
        });
    expect(sre.engineReady())
        .toBeTruthy();
    expect(sre.toSpeech('<math><mrow><msup><mn>3</mn><mn>7</mn></msup></mrow></math>'))
        .toBe('3 Superscript 7');
});

Menjalankan npm install dan npm run test menghasilkan kegagalan karena SRE mengembalikan 37 alih-alih 3 Superscript 7. Mengedit package.json untuk menggunakan mesin v3.1.1 dan menjalankannya kembali menghasilkan tes kelulusan.

Jelas ada sesuatu yang berubah, tetapi saya benar-benar kehilangan apa yang perlu saya lakukan untuk beradaptasi. Adakah orang lain yang mengalami ini, atau melihat apa yang jelas tidak saya lihat?

1
klobetime 6 Mei 2021, 20:15

1 menjawab

Jawaban Terbaik

Masalah terpecahkan, dengan bantuan pengelola SRE. Masalahnya bukan di 3.2.0, tetapi lelucon itu tidak menunggu sre siap. Tes hanya benar secara kebetulan di 3.1.1 karena aturan dikompilasi ke dalam inti. Tes berikut gagal dengan pengaturan di atas di 3.1.1 serta lokal tidak dimuat:

expect(sre.toSpeech('<math><mo>=</mo></math>'))
        .toBe('equals');
    Expected: "equals"
    Received: "="

Alasan utamanya adalah lelucon gagal memuat file lokal. Menyetel "silent": false akan menampilkan kesalahan:

 Unable to load file: /tmp/tests/node_modules/speech-rule-engine/lib/mathmaps/en.js
      TypeError: Cannot read property 'readFileSync' of null

Alasan kesalahan ini adalah karena lelucon tidak tahu bahwa itu berjalan di node.js. Menambahkan:

    "testEnvironment": "node",

Ke konfigurasi lelucon di package.json menyebabkan perilaku yang diharapkan.

0
klobetime 12 Mei 2021, 13:41