- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在为我的组件编写一些测试,但我在这里遇到了一些麻烦......
这是我的游戏组件:
import React from 'react';
import User from './User';
import Board from './Board';
import Deck from './Deck';
class Game extends React.Component {
constructor(props) {
super(props);
this.board = new Board();
this.deck = new Deck();
//some more code
}
componentDidMount() {
this.initializeUser("xpto");
//some more code
}
//some more code
initializeUser(name) {
const user = new User(name, this.deck);
//some more code
user.pickCards();
//some more code
}
//some more code
render() {
return (
<div className="game-container">
something to show
<div id="deck"></div>
</div>
);
}
}
Game.propTypes = {
};
Game.defaultProps = {
};
export default Game;
export default class Board {
//some code
}
export default class Deck {
constructor(props) {
//some more code
this.cardsLeft = 52;
this.lastPick = 0;
//some more code
}
pickCards() {
this.lastPick = 4;
this.cardsLeft -= this.lastPick;
const deckElem = document.getElementById("deck");
deckElem.innerHTML = this.cardsLeft;
return this.lastPick;
}
//some more code
}
class User {
constructor(name, deck) {
this.name = name;
this.tableDeck = deck;
this.cards = 0;
//some more code
}
//some more code
pickCards() {
const newCards = this.tableDeck.pickCards();
this.cards += newCards;
//some code
}
//some more code
}
export default User;
Board
和
User
被调用,如果
pickCards()
也被称为。
import React from 'react';
import { mount } from 'enzyme';
import Game from './Game';
import User from './User';
import Board from './Board';
describe('Game start', () => {
let container;
beforeEach(() => {
container = document.createElement('div');
document.body.appendChild(container);
});
afterEach(() => {
document.body.removeChild(container);
container = null;
});
it("test where I'm having problems", () => {
const boardSpy = jest.spyOn(Board, 'constructor'),
userSpy = jest.spyOn(User, 'constructor'),
pickCardMock = jest.fn();
User.pickCard = pickCardMock;
const wrapper = mount(<Game />, { attachTo: container });
expect(boardSpy).toHaveBeenCalledTimes(1);
expect(userSpy).toHaveBeenCalledTimes(1);
expect(pickCardMock).toHaveBeenCalledTimes(1);
//some more code
});
it("example test where I need to test everything without mocks", () => {
const wrapper = mount(<Game />, { attachTo: container });
expect(wrapper.find("#deck").text()).toEqual('48');
//some code
});
//some more tests
});
Board
和
User
因为我需要一切正常工作。但我想监视他们以检查他们是否真的被召唤。我想模拟
pickCard()
来自
User
.
jest.mock('./board');
和
require('board')
(例如)仅在我的
it()
内测试,但它没有工作。现在我正试图监视组件构造函数。
expect(boardSpy).toHaveBeenCalledTimes(1)
未能说被称为 0 次而不是 1 次。
pickCardMock
似乎没有链接到
User
模块因为调试时
pickCard
是普通函数而不是模拟函数和
expect(pickCardMock).toHaveBeenCalledTimes(1)
也收到 0 而不是 1。
I don't want to mock things for the whole test suite, I just want to mock for a single test (and I want to be able to spy a module call).
最佳答案
您可以使用jest.mock(moduleName, factory, options)模拟User
和 Board
组件。
例如。Game.jsx
:
import React, { Component } from 'react';
import User from './User';
import Board from './Board';
class Game extends Component {
constructor(props) {
super(props);
this.board = new Board({});
}
initializeUser(name) {
const user = new User(name);
user.pickCards();
}
render() {
return <div className="game-container"></div>;
}
}
export default Game;
Board.jsx
:
import React, { Component } from 'react';
class Board extends Component {
constructor(props) {
super(props);
}
render() {
return 'Board';
}
}
export default Board;
User.jsx
:
import React, { Component } from 'react';
class User extends Component {
constructor(props) {
super(props);
this.name = this.props.name;
}
pickCards() {
console.log('pick cards real implementation');
}
render() {
return 'User';
}
}
export default User;
Game.test.jsx
:
import React from 'react';
import { mount } from 'enzyme';
import Game from './Game';
import BoardMock from './Board';
import UserMock from './User';
jest.mock('./User', () => {
const mUser = { pickCards: jest.fn() };
return jest.fn(() => mUser);
});
jest.mock('./Board', () => jest.fn());
describe('62199135', () => {
afterAll(() => {
jest.resetAllMocks();
});
it('should pass', () => {
const userMock = new UserMock();
const wrapper = mount(<Game />);
const gameInstance = wrapper.instance();
gameInstance.initializeUser('some name');
expect(BoardMock).toHaveBeenCalledTimes(1);
expect(UserMock).toHaveBeenCalledWith('some name');
expect(userMock.pickCards).toHaveBeenCalledTimes(1);
});
});
PASS stackoverflow/62199135/Game.test.jsx (10.16s)
62199135
✓ should pass (33ms)
----------|---------|----------|---------|---------|-------------------
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s
----------|---------|----------|---------|---------|-------------------
All files | 100 | 100 | 100 | 100 |
Game.jsx | 100 | 100 | 100 | 100 |
----------|---------|----------|---------|---------|-------------------
Test Suites: 1 passed, 1 total
Tests: 1 passed, 1 total
Snapshots: 0 total
Time: 11.474s, estimated 12s
关于reactjs - spy 模块和模拟模块功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62199135/
我的内部类如下: public class ClassWithInnerObject { private final InnerObject innerObject; public Class
我在 STM32F4 Discovery 上安装了 STM32F4407VGT6 Controller 。我尝试使用 SPI + DMA 从 AD7683 ADC 读取数据,但 DMA 接收缓冲区始终
假设您有一个只有一个片选的 SPI 总线。 是否有可以将 8 个或更多设备连接到该 SPI 总线的芯片? 为简化起见,您可以假设所有设备都同意 SPI 模式(数据需要在上升沿有效)。此外,所有设备都是
我有一个 32 GB 的金士顿 SDHC microSD 卡,它必须与 MSP430F2618 通信通过 SPI .我无法通过使用 CMD55 + ACMD41(bit30 设置为 1)来初始化它,如
我正在使用 chai-spies 来确保调用 Controller 中的函数,这是我的测试: it('Should show right season and analysts when compet
我刚开始进行 JS 单元测试,但很难理解如何使用 Jasmine spy 创建有意义的测试。 it('should take an array of shopping items', function
我一直在阅读 SPI 以及如何创建内核驱动程序,但我仍然不确定所有这些是如何工作的。 例如: static struct spi_driver ds1305_driver = {
这是我正在测试的代码 eventsApp.factory('userData', ['userResource', function(userResource){ return{ ge
我有一个简单的组件: .html: {{title}} Change title .ts: export class AppComponent { title = 'app works!'
当我从 SPI 总线上的 PIC-18F4520 向我的卡发出地址为 (0x00000000) 的 cmd17 时,我从命令问题中获得了正确的返回 R1 token 。然后,经过几次循环检查后,我从发
我正在使用rspec-spies我想知道在打完所有电话后是否有办法检查 spy 。 例如,如果我做类似的事情 # setup Post.stub(:find).with(@post.id).and_r
我正在使用 rspec-spies并且想知道是否有办法在所有电话都打完后检查 spy 。 例如,如果我做类似的事情 # setup Post.stub(:find).with(@post.id).an
我正在尝试制作一个可以点击另一个程序按钮的程序。我被告知我需要使用 spy++ 来获取我想要点击的按钮的 ID,所以我现在正在使用它。我找到了包含我希望从中获取按钮 ID 的按钮的窗口(窗口中有 3
问题 在我们的代码库中,我们有一个 sinon 问题,可以使用下面的代码片段重现。问题是,它似乎是间接调用的 spy 返回力 false,console.log 明确指出该方法被调用但 spy.cal
考虑以下 react 组件。 import React, { Component } from "react"; import { reduxForm, Field } from "redux-for
我正在开发一个 Linux spi 驱动程序来处理通过 SPI 端口的通信。 我的 SoC 提供了三个 spi 模块(我将其理解为端口),称为 ecspi1/ecspi2/ecspi3。 我需要使用
当我将类的方法包装成这样的 Sinon-spy 时: sinon.spy(myObject, "myMethod") spy 内部会发生什么? 我猜 spy 对象有一个指向“myObject.myMe
我正在为遗留代码编写一些 JUnit 测试,并且我非常喜欢使用注释。我想知道是否可以创建一个 spy 对象的声明,然后实例化它。我问的原因是因为我有一个带有非空构造函数的类。该构造函数的值直到测试用例
我有两个不同的设备要连接 Arduino .一个Ethernet屏蔽和轴编码器。第一个有 SPI模式 0 和第二个 SPI 模式 2。它们冲突。这个问题有解决方案吗? 我使用不同的芯片选择引脚,这两个
我正在运行使用 Yocto (Pyro) 构建的嵌入式 Linux (4.14.16)。我在具有 i.MX6DL 且 SPI 连接到 FPGA(Xilinx Artix 7)的定制板上运行。我目前正在
我是一名优秀的程序员,十分优秀!