赛普拉斯 - 以编程方式操作Angular/NGRX应用程序



你如何以编程方式与赛普拉斯的Angular/NGRX进行交互?柏树文档似乎只提到反应:https://www.cypress.io/blog/2018/11/14/testing-redux-store/

// expose store when run in Cypress
if (window.Cypress) {
window.store = store
}
cy
.window()
.its('store')
.invoke('dispatch', { type: 'ADD_TODO', text: 'Test dispatch' })
// check if the app has updated its UI

这将是 React 方法;那么 Angular 呢?

在 Angular 中几乎是一样的。在您的AppComponent或任何您有商店的地方,您可以执行以下操作:

// Expose the store
@Component({...})
export class AppComponent {
constructor(private store: Store<AppState>){
if(window.Cypress){
window.store = this.store;
}
}
}

然后,您可以创建自己的赛普拉斯实用程序:

function dispatchAction(action: Action): Cypress.Chainable<any> {
return cy.window().then(w => {
const store = w.store;
store.dispatch(action);
});
}

最后,您可以在赛普拉斯测试中使用它:

dispatchAction(new MyAction()).then(() => {
// Assert the side effect of your action
// ...
// cy.get('.name').should('exist');
});

您可以像这样访问状态(除了已经接受的答案之外还有效(:

import { firstValueFrom } from 'rxjs';

cy.window().its('store').then((store: any) => {
firstValueFrom(store.source).then((state) => {
cy.log('got state', state);
});
});

最新更新