我怎样才能获得在jest模拟函数中调用的参数?
我想检查对象传递作为参数.
我正在使用Jest测试一个角度应用程序,它需要很长时间才能运行简单的测试,我似乎无法弄清楚原因.
我的Jest设置package.json
如下:
"jest": {
"modulePaths": [
"<rootDir>/src",
"<rootDir>/node_modules"
],
"testPathIgnorePatterns": [
".git/.*",
"node_modules/.*"
],
"transformIgnorePatterns": [
"node_modules/.*",
".*\\.js"
],
"setupTestFrameworkScriptFile": "<rootDir>/src/setupJest.js",
"preset": "jest-preset-angular",
"testEnvironment": "jsdom",
"testRegex": "src/app/.*\\.spec\\.ts$",
"moduleFileExtensions": [
"ts",
"js",
"json"
],
"verbose": true,
"cacheDirectory": ".jest-cache",
"coveragePathIgnorePatterns": [
".*\\.(shim\\.ngstyle|ngfactory)\\.ts"
],
"globals": {
"ts-jest": {
"tsConfigFile": "./tsconfig.json"
},
"__TRANSFORM_HTML__": true
}
}
Run Code Online (Sandbox Code Playgroud)
我的Jest安装文件:
'use strict';
require('core-js/es6/reflect');
require('core-js/es7/reflect');
require('zone.js');
require('zone.js/dist/proxy.js');
require('zone.js/dist/sync-test');
require('zone.js/dist/async-test');
require('zone.js/dist/fake-async-test');
require('jest-zone-patch');
const getTestBed = require('@angular/core/testing').getTestBed;
const BrowserDynamicTestingModule = require('@angular/platform-browser-dynamic/testing').BrowserDynamicTestingModule;
const platformBrowserDynamicTesting = require('@angular/platform-browser-dynamic/testing') .platformBrowserDynamicTesting;
getTestBed().initTestEnvironment(
BrowserDynamicTestingModule, …
Run Code Online (Sandbox Code Playgroud) 下面是我的代码片段。我遇到了一个问题,当我点击 IconComponent( dropdown-arrow ) 时,选择组件没有打开。
<Select
IconComponent={() => (
<ExpandMore className="dropdown-arrow" />
)}
onChange={this.handleSelectUpdate.bind(this)}
value={this.state.somestate}
inputProps={{
name: "someprops1",
id: "someprops1"
}}
disabled={this.props.someprops1.length === 1}
className="dropdown"
>
>
{_.map(this.props.someprops2, (item, id) => {
return (
<MenuItem value={item.somekey} key={id}>
{item.somekey}
</MenuItem>
);
})}
</Select>
Run Code Online (Sandbox Code Playgroud) 我正在使用Babel Jest转换我的代码以进行测试。我不知道如何使用相对于项目根目录的路径。
例如,如果我在测试文件中导入以下模块:/imports/ui/myModule
Jest抛出错误
Cannot find module
'/Users/me/dev/myProject/Users/me/dev/myProject/imports/ui/myModule' from 'test.jsx'`
Run Code Online (Sandbox Code Playgroud)
但是,如果我导入一个具有相对路径的模块,例如:../../ui/myModule
它起作用。
我的.babelrc
:
{
"plugins": [
"transform-decorators-legacy",
"transform-class-properties",
"babel-root-slash-import"
],
"presets": [
"es2015",
"react",
"stage-0"
],
"env": {
"test": {
"plugins": [
"transform-decorators-legacy",
"transform-class-properties",
"babel-root-slash-import"
],
"presets": [
"es2015",
"react",
"stage-0"
]
}
}
}
Run Code Online (Sandbox Code Playgroud)
我的笑话配置是:
"jest": {
"roots": ["<rootDir>/imports/tests/jest"]
},
Run Code Online (Sandbox Code Playgroud) 我遇到了一个非常复杂的情况。我会尽量保持简洁。
所以我在myModule.js 中有这样的代码:
const lib = require('@third-party/lib');
const myFunction = () => {
const client = lib.createClient('foo');
return new Promise((resolve, reject) => {
client.on('error', (err) => reject(err));
client.on('success', () => {
client.as(param1).post(param2, param3, (err, data) => {
if (err) reject(err);
// Some important logical processing of data
resolve(data);
});
});
});
}
module.exports = { myFunction };
Run Code Online (Sandbox Code Playgroud)
有几件事情我可以嘲笑,如:createClient
。我无法嘲笑的是我什至不知道如何做到这一点的事件部分。还有那.as().post()
部分。
这是我的笑话测试的样子:
const myModule = require('./myModule');
const mockData = require('./mockData'); …
Run Code Online (Sandbox Code Playgroud) javascript ×4
jestjs ×4
angular ×1
babel-jest ×1
babeljs ×1
ecmascript-6 ×1
es6-modules ×1
es6-promise ×1
material-ui ×1
node.js ×1
reactjs ×1
typescript ×1