我正在用Jest嘲笑一个函数,文档说他们真的是'间谍'.我也看过在SinonJS中使用间谍,但我发现两者之间没有明显区别.如果他们服务于同一目的,有没有理由选择一个而不是另一个?
我们想要获取一个文档类型并改变它的一些字段,然后返回具有新类型的新文档。我们想根据一组值(collectionDataFields在下面的示例中)来确定要改变的字段。
type AllDocuments = {
__typename: 'cat'
a: '123',
b: '123',
z: 'xyz'
} | {
__typename: 'dog'
a: '123',
c: '123',
z: 'xyz'
}
const collectionDateFields = {
cat: ['a', 'b'],
dog: ['a', 'c']
} as const
export const useStringsToNums = (document: AllDocuments) => {
const dateFields = collectionDateFields[document.__typename]
dateFields.forEach((field) => {
document[field] = parseInt(document[field])
})
return document
}
Run Code Online (Sandbox Code Playgroud)
在示例中,dateFields输入为,readonly ["a", "b"] | readonly ["a", "c"]但个人输入field为any。
在document返回的 …
我已将 jest 和 jsdom 安装到我的 React 项目中,但在导入使用该变量的 React 组件时遇到问题window.localStorage。我添加了 jsdom 的安装文件,我相信它可以解决问题。
这是我的设置:
package.json 中的笑话配置
"jest": {
"verbose": true,
"testEnvironment": "jsdom",
"testURL": "http://localhost:8080/Dashboard/index.html",
"transform": {
"^.+\\.js$": "<rootDir>/node_modules/babel-jest",
"^.+\\.jsx$": "<rootDir>/node_modules/babel-jest"
},
"unmockedModulePathPatterns": [
"node_modules/react/",
],
"moduleFileExtensions": [
"js",
"jsx",
"json",
"es6"
]
}
Run Code Online (Sandbox Code Playgroud)
安装程序.js
import jsdom from 'jsdom';
const DEFAULT_HTML = '<html><body></body></html>';
global.document = jsdom.jsdom(DEFAULT_HTML);
global.window = document.defaultView;
global.navigator = window.navigator;
global.localStorage = window.localStorage;
Run Code Online (Sandbox Code Playgroud)
测试.js
'use strict';
import setup from './setup';
import React from 'react';
import jsdom from 'jsdom';
import …Run Code Online (Sandbox Code Playgroud)