不确定如何措辞,但我创建了一组自定义命令来处理赛普拉斯测试(https://github.com/svish/cypress-helper-redux/)中的Redux存储。该代码可以正常工作,但是我缺乏例如类型安全性商店状态。
我的应用程序代码中已经准备好类型,但是由于您如何添加自定义赛普拉斯帮助程序命令,尤其是它们的类型安全性,我不确定如何平稳地将它们“放入”依赖项代码。
这些命令本来只是常规功能,但是要使它们“进入”赛普拉斯可用命令链,基本上,您需要这样做:
具有功能
// cypress-helper-redux/src/redux.ts
import { Store, AnyAction } from 'redux';
import { STORE, ACTIONS } from './util';
export type Action = AnyAction;
export type ActionsCreators = any;
export type State = any;
export type Callback = (
store: Store<State, Action>,
actionCreators: ActionsCreators
) => void;
export default (callback: Callback): void => {
const window = (cy as any).state('window');
callback(window[STORE], window[ACTIONS]);
};
将自定义命令添加到赛普拉斯以使其可用
// cypress-helper-redux/src/index.ts
/// <reference path="./globals.ts"/>
import redux from './redux';
Cypress.Commands.add('redux', { prevSubject: false }, redux);
扩展赛普拉斯的链式键入以使命令“可见”并使用Typescript进行输入保护
// cypress-helper-redux/src/globals.ts
declare namespace Cypress {
interface Chainable<Subject> {
redux: typeof import('./redux').default;
}
}
要在赛普拉斯设置中使用它,只需将以下内容添加到赛普拉斯支持文件中即可:
// cypress/support/index.ts
include 'cypress-helper-redux';
但是,如您所见,当包含此帮助器时,由于它们是编译时,因此无法为这些State
,Action
或ActionCreators
分配类型类型声明,我也不可能通过某种函数来完成。
基本上我想我想要模块级的泛型或如何调用它。要进行import 'some-module';
并以某种方式声明,无论该模块中使用了X
和Y
的哪个地方,都应将其替换为MyX
和{{1} },并使其“正常工作”。在我的特定情况下,我想用应用程序特定商店设置中的类型覆盖MyY
,State
或Action
。
这有可能吗?似乎有些人可以通过ActionCreators
来完成这些工作,但并不能完全理解这些工作原理。