我正在尝试使用webpack + traceur来调用Ecmascript 6模块来转换为ES5 CommonJS,但是我无法成功地对它们进行单元测试.
我尝试使用Jest + traceur预处理器,但自动插件和依赖名称似乎变得棘手,而且我似乎无法使用sourceMaps来使用Jest和node-inspector调试.
是否有更好的单元测试ES6模块框架?
是否可以在不使用esm或不使用 Jest 的情况下使用 Jest 测试 ES6 模块babel?由于node v13本机支持 es6 已经尝试过:
//package.json
{
  …
  "type": "module"
  …
}
//__tests__/a.js
import Foo from '../src/Foo.js';
$ npx jest
Jest encountered an unexpected token
…
Details:
/home/node/xxx/__tests__/a.js:1
import Foo from '../src/Foo.js';
^^^^^^
SyntaxError: Cannot use import statement outside a module
当 babel 添加一个转译器时,它可以工作,但是 es6 模块也可以在本地使用吗?
我正在研究一个React应用程序,我想测试一个模块,我们称之为B,这取决于另一个模块,我们称之为A.
场景可能是这样的:
export function helperFn() {
  return { prop1: 10, prop2: 20 };
}
import React from 'react';
import { helperFn } from '../moduleA';
export class CustomComp extends React.Component {
  render() {
    const helperObj = helperFn();
    return (
      <div>{helperObj.prop1}</div>
    );
  }
}
用于测试我的组件的核心库是Jest和Enzyme.我的目标是测试模块B,但我想单独测试它,所以我想模拟对moduleA.js的依赖.
我知道一种方法是将helperFn作为prop而不是导入它,所以在测试期间我可以注入一个mock函数,但是这个app上有很多模块,每个都有一些依赖.
研究了一下我发现使用Jest来模拟一个dependecy是可行的,但是我尝试了很多东西却没有成功.我试过这个问题的方法,也来自这篇文章,我没有运气.我还阅读了Jest docs 的Manual Mocks and Mock Functions指南,但我认为它们非常令人困惑.
我可以使用这篇文章的方法使它工作(即我可以模拟moduleA.js依赖),但我还有另一个问题.它可以很好地测试moduleB.js,但是当我继续测试moduleA.js时,我不得不在moduleA.test.js中导入moduleA.js而我得到了模拟,而我想要真正的模块.
所以,我需要帮助来理解我如何在moduleB测试文件中模拟依赖关系A.
如果不让我知道,我希望我很清楚,我会补充你可能需要的澄清.
提前致谢 !
被测试的文件使用了从另一个文件导入的函数
import {myFunc} from './myFile'
如何在对此文件的测试中模拟此函数的返回值?我在开玩笑。
我正在测试一个导入 Class 的反应本机组件LanguageStore。目前测试失败,因为组件正在实例化此类,该类调用在测试范围内未定义的私有设置器:
FAIL  src\\modules\\languageProvider\\__tests__\\LanguageProvider-test.js\n  \xe2\x97\x8f renders correctly\n\n    TypeError: _this.strings.setLanguage is not a function\n\n      at LanguageStore.setLanguage (src\\modules\\languageProvider\\LanguageStore.js:25:15)\n      at new LanguageProvider (src\\modules\\languageProvider\\LanguageProvider.js:30:16)\n问题:
\n\n如何将玩笑依赖模拟提升到实际依赖之上?
\n\n为了解决这个问题,我jest.mock根据这个答案调用了 How can I mock an ES6 module import using Jest? 。但我得到了与以前相同的错误,因为测试正在调用 LanguageStore 的实现而不是我在下面创建的模拟 - _this.strings.setLanguage is not a function:
import { View } from \'react-native\';\nimport React from \'react\';\nimport { shallow } from \'enzyme\';\nimport renderer from \'react-test-renderer\';\nimport connect from \'../connect.js\';\nimport LanguageProvider from \'../LanguageProvider\';\nimport LanguageStore from \'../LanguageStore\';\n\nit(\'renders …我有以下要在Jest中测试的打字稿类。
//MyClass.ts
import { foo } from './somewhere/FooFactory';
export class MyClass {
  private _state : number;
  constructor( arg : string ) {
    this._state = foo( arg );
  }
  public getState() : string {
    return this._state;
  }
}
这是我的测试:
//MyClass.spec.ts
import { MyClass } from './MyClass';
describe( 'test MyClass', () => {
  test( 'construct' => {
    const c = new MyClass( 'test' );
    expect( c ).toBeDefined();
    expect( c.getState() ).toEqual( 'TEST' );
  } );
} );
如何模拟MyClass中使用的foo函数,以便此测试通过?
jestjs ×6
ecmascript-6 ×2
mocking ×2
reactjs ×2
unit-testing ×2
enzyme ×1
es6-class ×1
javascript ×1
node.js ×1
react-native ×1
traceur ×1
typescript ×1