相关疑难解决方法(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万
查看次数

在JavaScript中定义只读属性

给定一个对象obj,我想定义一个只读属性'prop'并将其值设置为val.这是正确的方法吗?

Object.defineProperty( obj, 'prop', {
    get: function () {
        return val;
    }
});
Run Code Online (Sandbox Code Playgroud)

结果应该是(for val = 'test'):

obj.prop; // 'test'
obj.prop = 'changed';
obj.prop; // still 'test' since it's read-only
Run Code Online (Sandbox Code Playgroud)

这个方法 很有用:http://jsfiddle.net/GHMjN/
我只是不确定这是否是最简单/最顺利/最合适的方式...

javascript

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

如何使用thunk动作对mapDispatchToProps进行单元测试

我有以下Redux动作创建者:

export const keyDown = key => (dispatch, getState) => {
    const { modifier } = getState().data;
    dispatch({ type: KEYDOWN, key });
    return handle(modifier, key); // Returns true or false
};
Run Code Online (Sandbox Code Playgroud)

以下连接组件:

export const mapDispatchToProps = dispatch => ({
    onKeyDown: e => {
        if(e.target.tagName === "INPUT") return;
        const handledKey = dispatch(keyDown(e.keyCode));
        if(handledKey) {
            e.preventDefault();
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

我正在尝试编写一个测试,以确保在除了之外的任何操作时dispatch调用该keyDown操作.这是我的测试:tagName"INPUT"

import { spy } from "sinon";
import keycode from "keycodes";
import { mapDispatchToProps } from "./connected-component"; …
Run Code Online (Sandbox Code Playgroud)

javascript sinon redux redux-thunk react-redux

9
推荐指数
1
解决办法
1056
查看次数

使用 jest.mock 和 TypeScript 没有杂乱的类型转换?

当我使用 TypeScript 编译器编译测试并使用 Jest 模拟时,我经常收到以下错误tsc

error TS2339: Property 'mockImplementationOnce' does not exist on type
              'typeof readFile'.
Run Code Online (Sandbox Code Playgroud)

从这个最小的测试:

jest.mock('fs');
// Run before the imports but does not alter types :(

import { readFile } from 'fs';
import { fnThatReadsFile } from './lib';

it('should read a file', () => {
  const err = {};
  readFile.mockImplementationOnce((_, callback) => callback(err, null));
  // ^^ error TS2339: Property 'mockImplementationOnce' does not exist on type 'typeof readFile'.

  fnThatReadsFile();
  // expect...
});
Run Code Online (Sandbox Code Playgroud)


除了:

  • 铸件: readFile as …

unit-testing typescript jestjs typescript2.0

7
推荐指数
1
解决办法
6108
查看次数

监视/嘲笑导入的导入

我正在 VueJS 应用程序上使用 vitest 编写单元测试。

\n

作为我们应用程序的一部分,我们有一组 API 包装器服务,例如,users.js它包装我们的相关 API 调用以检索用户信息:

\n
import client from \'./client\'\n\nconst getUsers = () => {\n   return client.get(...)\n}\n\nexport default {\n   getUsers\n}\n
Run Code Online (Sandbox Code Playgroud)\n

这些服务中的每一个都使用一个通用的,client.js而该通用的又axios用于执行 REST 调用和拦截器管理。

\n

对于我们的单元测试,我想检查相关的内容是否url被调用,因此想要监视或模拟client.

\n

我遵循了各种示例和帖子,但努力弄清楚如何模拟导入 ( client) 的导入 ( users.js)。

\n

我能够得到的最接近的(基于这些帖子 - 1 , 2)是:

\n
import { expect, vi } from \'vitest\'\nimport * as client from \'<path/to/client.js>\'\nimport UsersAPI from \'<path/to/users.js>\'\n\ndescribe(\'Users API\', () => {\n    beforeEach(() => …
Run Code Online (Sandbox Code Playgroud)

javascript unit-testing ecmascript-6 vue.js vitest

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

在 ES6 中模拟默认导出的最佳方法是什么?

根据这个答案,我找到了一种模拟命名导出的好方法:/sf/answers/2688987591/

代码测试.js:

import {someMethod} from './someNamedExports'
export default () => someMethod()
Run Code Online (Sandbox Code Playgroud)

codeToTestSpec.js:

import * as someNamedExports from './someNamedExports'
import codeToTest from './codeToTest

sinon.stub(someNamedExports, 'someMethod')
codeToTest()
someNamedExports.someMethod.should.have.been.called
someNamedExports.someMethod.restore()
Run Code Online (Sandbox Code Playgroud)

这按预期工作。

但是,我似乎遇到了默认导出的问题。这是我尝试过的:

代码测试.js:

import someDefaultExport from './someDefaultExport
export default () => someDefaultExport()
Run Code Online (Sandbox Code Playgroud)

codeToTestSpec.js:

import * as someDefaultExport from './someDefaultExport'
import codeToTest from './codeToTest

sinon.stub(someDefaultExport, 'default')
codeToTest()
someDefaultExport.default.should.have.been.called
someDefaultExport.default.restore()
Run Code Online (Sandbox Code Playgroud)

它似乎没有按预期进行存根,并抱怨尝试恢复时未定义 someDefaultExport.default 。

我错过了什么还是这可能是 sinon 的错误?

javascript mocha.js sinon ecmascript-6

5
推荐指数
0
解决办法
1807
查看次数