我正在尝试使用webpack + traceur来调用Ecmascript 6模块来转换为ES5 CommonJS,但是我无法成功地对它们进行单元测试.
我尝试使用Jest + traceur预处理器,但自动插件和依赖名称似乎变得棘手,而且我似乎无法使用sourceMaps来使用Jest和node-inspector调试.
是否有更好的单元测试ES6模块框架?
给定一个对象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/
我只是不确定这是否是最简单/最顺利/最合适的方式...
我有以下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) 当我使用 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 …我正在 VueJS 应用程序上使用 vitest 编写单元测试。
\n作为我们应用程序的一部分,我们有一组 API 包装器服务,例如,users.js它包装我们的相关 API 调用以检索用户信息:
import client from \'./client\'\n\nconst getUsers = () => {\n return client.get(...)\n}\n\nexport default {\n getUsers\n}\nRun Code Online (Sandbox Code Playgroud)\n这些服务中的每一个都使用一个通用的,client.js而该通用的又axios用于执行 REST 调用和拦截器管理。
对于我们的单元测试,我想检查相关的内容是否url被调用,因此想要监视或模拟client.
我遵循了各种示例和帖子,但努力弄清楚如何模拟导入 ( client) 的导入 ( users.js)。
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) 根据这个答案,我找到了一种模拟命名导出的好方法:/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 ×5
ecmascript-6 ×3
unit-testing ×3
jestjs ×2
sinon ×2
mocha.js ×1
react-redux ×1
redux ×1
redux-thunk ×1
traceur ×1
typescript ×1
vitest ×1
vue.js ×1