相关疑难解决方法(0)

如何使用ES6模块模拟单元测试的依赖关系

我正在尝试使用webpack + traceur来调用Ecmascript 6模块来转换为ES5 CommonJS,但是我无法成功地对它们进行单元测试.

我尝试使用Jest + traceur预处理器,但自动插件和依赖名称似乎变得棘手,而且我似乎无法使用sourceMaps来使用Jest和node-inspector调试.

是否有更好的单元测试ES6模块框架?

javascript unit-testing ecmascript-6 traceur jestjs

56
推荐指数
4
解决办法
2万
查看次数

Node v13 / Jest / ES6 — 对没有 babel 或 esm 的模块的原生支持

是否可以在不使用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
Run Code Online (Sandbox Code Playgroud)

当 babel 添加一个转译器时,它可以工作,但是 es6 模块也可以在本地使用吗?

node.js ecmascript-6 jestjs

25
推荐指数
2
解决办法
7219
查看次数

在React应用程序中使用Jest模拟导入/模块

我正在研究一个React应用程序,我想测试一个模块,我们称之为B,这取决于另一个模块,我们称之为A.

场景可能是这样的:

moduleA.js

export function helperFn() {
  return { prop1: 10, prop2: 20 };
}
Run Code Online (Sandbox Code Playgroud)

moduleB.js

import React from 'react';
import { helperFn } from '../moduleA';

export class CustomComp extends React.Component {
  render() {
    const helperObj = helperFn();
    return (
      <div>{helperObj.prop1}</div>
    );
  }
}
Run Code Online (Sandbox Code Playgroud)

用于测试我的组件的核心库是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.

如果不让我知道,我希望我很清楚,我会补充你可能需要的澄清.

提前致谢 !

unit-testing reactjs jestjs enzyme

5
推荐指数
1
解决办法
3243
查看次数

Jest - 模拟函数,从另一个文件导入

被测试的文件使用了从另一个文件导入的函数

import {myFunc} from './myFile'
Run Code Online (Sandbox Code Playgroud)

如何在对此文件的测试中模拟此函数的返回值?我在开玩笑。

reactjs jestjs

5
推荐指数
1
解决办法
4093
查看次数

如何将玩笑依赖模拟提升到实际依赖之上?

我正在测试一个导入 Class 的反应本机组件LanguageStore。目前测试失败,因为组件正在实例化此类,该类调用在测试范围内未定义的私有设置器:

\n\n
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
Run Code Online (Sandbox Code Playgroud)\n\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

\n\n
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 …
Run Code Online (Sandbox Code Playgroud)

mocking jestjs react-native es6-class

4
推荐指数
1
解决办法
7173
查看次数

如何在Jest中模拟函数

我有以下要在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;
  }
}
Run Code Online (Sandbox Code Playgroud)

这是我的测试:

//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' );
  } );
} );
Run Code Online (Sandbox Code Playgroud)

如何模拟MyClass中使用的foo函数,以便此测试通过?

mocking typescript jestjs

3
推荐指数
1
解决办法
1951
查看次数