语音规则引擎 3.2 中的行为变化?
Behavior change in speech-rule-engine 3.2?
我正在使用 speech-rule-engine 从 MathML 生成英文文本。尝试从 v3.1.1 升级到 v3.2.0 时,我看到测试失败,原因我不明白。
我创建了一个简单的两个文件项目来说明这个问题:
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
}
}
example.test.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');
});
运行 npm install
和 npm run test
导致失败,因为 SRE 返回 37 而不是 3 上标 7 。编辑 package.json 以使用引擎的 v3.1.1 并重新运行结果通过测试。
显然有些事情发生了变化,但我完全不知道我需要做些什么来适应。有没有其他人遇到过这个,或者看到我清楚没有?
在 SRE 维护者的帮助下,问题已解决。问题不在 3.2.0,而是那个 jest 没有等到 sre 就绪。由于规则被编译到核心中,测试在 3.1.1 中只是侥幸正确。以下测试在 3.1.1 中使用上述设置失败,并且未加载语言环境:
expect(sre.toSpeech('<math><mo>=</mo></math>'))
.toBe('equals');
Expected: "equals"
Received: "="
主要原因是jest加载locale文件失败。设置"silent": false
会显示错误:
Unable to load file: /tmp/tests/node_modules/speech-rule-engine/lib/mathmaps/en.js
TypeError: Cannot read property 'readFileSync' of null
这个错误的原因是jest不知道它运行在node.js中。添加:
"testEnvironment": "node",
package.json
中的开玩笑配置会导致预期的行为。
我正在使用 speech-rule-engine 从 MathML 生成英文文本。尝试从 v3.1.1 升级到 v3.2.0 时,我看到测试失败,原因我不明白。
我创建了一个简单的两个文件项目来说明这个问题:
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
}
}
example.test.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');
});
运行 npm install
和 npm run test
导致失败,因为 SRE 返回 37 而不是 3 上标 7 。编辑 package.json 以使用引擎的 v3.1.1 并重新运行结果通过测试。
显然有些事情发生了变化,但我完全不知道我需要做些什么来适应。有没有其他人遇到过这个,或者看到我清楚没有?
在 SRE 维护者的帮助下,问题已解决。问题不在 3.2.0,而是那个 jest 没有等到 sre 就绪。由于规则被编译到核心中,测试在 3.1.1 中只是侥幸正确。以下测试在 3.1.1 中使用上述设置失败,并且未加载语言环境:
expect(sre.toSpeech('<math><mo>=</mo></math>'))
.toBe('equals');
Expected: "equals"
Received: "="
主要原因是jest加载locale文件失败。设置"silent": false
会显示错误:
Unable to load file: /tmp/tests/node_modules/speech-rule-engine/lib/mathmaps/en.js
TypeError: Cannot read property 'readFileSync' of null
这个错误的原因是jest不知道它运行在node.js中。添加:
"testEnvironment": "node",
package.json
中的开玩笑配置会导致预期的行为。