the*_*ben 5 javascript jasmine karma-jasmine jasmine2.0 google-chrome-headless
我很难弄清楚如何访问通常作为浏览器中窗口对象的方法提供的函数。我正在使用 Karma、Headless Chrome 和 Jasmine。
这是我的问题的简化:
我有一个名为add-numbers-together.js:
function addTogether(a, b) {
return a + b;
}
(function(){
addTogether(2,5);
})();
Run Code Online (Sandbox Code Playgroud)
Jasmine 测试正在测试这一点:
describe('add-numbers-together.js', function() {
it('Should add numbers together', function() {
require('module/add-numbers-together');
console.info(window.addTogether);
});
});
Run Code Online (Sandbox Code Playgroud)
require 语句肯定可以检索模块,我已经测试过。
我期望 console.info 打印出函数的定义,就像我在实际浏览器中执行此操作时的情况一样,但此 console.info 返回undefined。为什么是这样?在测试中需要该模块后,如何访问 addTogether 函数?
我猜这是 Jasmine 或 Headless Chrome 的一些怪癖,但无论我如何努力搜索,我都找不到答案!
另外,请注意:我不想向模块本身添加任何测试代码,这对我来说不是一个选择。
我稍微更改了测试以检查该功能是否正确undefined,但无论浏览器如何,它都失败Chrome了ChromeHeadless。
describe('add-numbers-together.js', function() {
it('Should add numbers together', function() {
require('module/add-numbers-together');
expect(window.addTogether).not.toBeUndefined();
});
});
Run Code Online (Sandbox Code Playgroud)
要获得通过此测试的版本,您有多种选择:
export函数,然后将测试更改import为该模块(推荐)。如果使用 AMD,这define也可以。requireexport(webpack 可以做到这一点,这有点黑客,但如果您无法编辑该脚本,它就可以工作)。这通常只能使用第 3 方脚本来完成。这是使用该函数为选项 #1 重写的测试代码export。
export function addTogether(a, b) {
return a + b;
}
(function () {
addTogether(2, 5);
})();
Run Code Online (Sandbox Code Playgroud)
这是使用import被测模块的选项#1 重写的测试。
import * as addNumbersTogether from 'add-numbers-together';
describe('add-numbers-together.js', function () {
it('Should add numbers together', function () {
expect(addNumbersTogether.addTogether).not.toBeUndefined();
});
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1097 次 |
| 最近记录: |