Javascript 使用 Jest 和 ES6 模块测试单元
Javascript Test unit with Jest an ES6 module
谷歌搜索后有太多不同的帖子,无法选择清晰和最新的解决方案...
我写了 3 个测试来检查不同的可能性
===========。测试 1 正常 ================
// helloJest.js
function sayHello() {
return "hello there jest"
}
module.exports = sayHello;
// helloJestTest
const sayHello = require('../../src/client/js/helloJest');
test('string returning hello there jest', () => {//
expect(sayHello()).toEqual('hello there jest');
});
===========。测试 2 失败 ================
// helloJest.js
function sayHello() {
return "hello there jest"
}
export default { sayHello }; // <= changed
// helloJestTest
const sayHello = require('../../src/client/js/helloJest');
test('string returning hello there jest', () => {//
expect(sayHello()).toEqual('hello there jest');
});
TypeError: sayHello is not a function
3 |
4 | test('string returning hello there jest', () => {//
> 5 | expect(sayHello()).toEqual('hello there jest');
| ^
6 | });
7 |
===========。测试 3 失败 ================
// helloJest.js
function sayHello() {
return "hello there jest"
}
export default { sayHello }; // <= changed
// helloJestTest
import { sayHello } from '../../src/client/js/helloJest'; // <= changed
test('string returning hello there jest', () => {//
expect(sayHello()).toEqual('hello there jest');
});
TypeError: (0 , _helloJest.sayHello) is not a function
3 |
4 | test('string returning hello there jest', () => {//
> 5 | expect(sayHello()).toEqual('hello there jest');
| ^
6 | });
如何正确通过 TEST 3 ???
我正在使用以下软件包
package.json
"babel-core": "^6.26.3",
"babel-jest": "^23.6.0",
"babel-loader": "^7.1.5",
"babel-preset-env": "^1.7.0",
"babel-preset-es2015": "^6.24.1",
...
"jest": {
"moduleFileExtensions": ["js"],
"transform": { "^.+\.js?$": "babel-jest" },
"testRegex": "/tests/.*\.(js)$"
}
我在
.babelrc
{
"presets": ["env"]
}
你在那里的几个地方绊倒了。主要是:您不使用默认 import/export.
的 {}
这个:
export default { sayHello };
导出一个对象作为模块的默认导出。该对象有一个 属性、sayHello
来引用函数。要使 函数 成为默认导出,请不要使用 {}
:
export default sayHello;
那么,在导入的时候,如果要默认导入,就不要使用{}
:
import sayHello from '../../src/client/js/helloJest';
如果要导出 named 导出,请使用 {}
:
export { sayHello };
和
import { sayHello } from '../../src/client/js/helloJest';
plunker 上的两个示例:https://embed.plnkr.co/f8PhOhULphQUrVXwdXF3/
测试 2
您确实默认导出了一个带有单个 属性 的对象,即 sayHello
函数,因此您应该通过以下方式开玩笑地导入它:
const { sayHello } = require('../../src/client/js/helloJest');
测试 3
你再次像上面那样导出。
在这种情况下,您可以按以下方式导入它:
import Hello from '../../src/client/js/helloJest';
然后您应该可以将您的函数用作:
Hello.sayHello
谷歌搜索后有太多不同的帖子,无法选择清晰和最新的解决方案...
我写了 3 个测试来检查不同的可能性
===========。测试 1 正常 ================
// helloJest.js
function sayHello() {
return "hello there jest"
}
module.exports = sayHello;
// helloJestTest
const sayHello = require('../../src/client/js/helloJest');
test('string returning hello there jest', () => {//
expect(sayHello()).toEqual('hello there jest');
});
===========。测试 2 失败 ================
// helloJest.js
function sayHello() {
return "hello there jest"
}
export default { sayHello }; // <= changed
// helloJestTest
const sayHello = require('../../src/client/js/helloJest');
test('string returning hello there jest', () => {//
expect(sayHello()).toEqual('hello there jest');
});
TypeError: sayHello is not a function
3 |
4 | test('string returning hello there jest', () => {//
> 5 | expect(sayHello()).toEqual('hello there jest');
| ^
6 | });
7 |
===========。测试 3 失败 ================
// helloJest.js
function sayHello() {
return "hello there jest"
}
export default { sayHello }; // <= changed
// helloJestTest
import { sayHello } from '../../src/client/js/helloJest'; // <= changed
test('string returning hello there jest', () => {//
expect(sayHello()).toEqual('hello there jest');
});
TypeError: (0 , _helloJest.sayHello) is not a function
3 |
4 | test('string returning hello there jest', () => {//
> 5 | expect(sayHello()).toEqual('hello there jest');
| ^
6 | });
如何正确通过 TEST 3 ???
我正在使用以下软件包
package.json
"babel-core": "^6.26.3",
"babel-jest": "^23.6.0",
"babel-loader": "^7.1.5",
"babel-preset-env": "^1.7.0",
"babel-preset-es2015": "^6.24.1",
...
"jest": {
"moduleFileExtensions": ["js"],
"transform": { "^.+\.js?$": "babel-jest" },
"testRegex": "/tests/.*\.(js)$"
}
我在
.babelrc
{
"presets": ["env"]
}
你在那里的几个地方绊倒了。主要是:您不使用默认 import/export.
的{}
这个:
export default { sayHello };
导出一个对象作为模块的默认导出。该对象有一个 属性、sayHello
来引用函数。要使 函数 成为默认导出,请不要使用 {}
:
export default sayHello;
那么,在导入的时候,如果要默认导入,就不要使用{}
:
import sayHello from '../../src/client/js/helloJest';
如果要导出 named 导出,请使用 {}
:
export { sayHello };
和
import { sayHello } from '../../src/client/js/helloJest';
plunker 上的两个示例:https://embed.plnkr.co/f8PhOhULphQUrVXwdXF3/
测试 2
您确实默认导出了一个带有单个 属性 的对象,即 sayHello
函数,因此您应该通过以下方式开玩笑地导入它:
const { sayHello } = require('../../src/client/js/helloJest');
测试 3
你再次像上面那样导出。 在这种情况下,您可以按以下方式导入它:
import Hello from '../../src/client/js/helloJest';
然后您应该可以将您的函数用作:
Hello.sayHello