我在让cypress正确记录我们的应用程序正在处理的每个redux操作时遇到了麻烦,作为cypress控制台的实时提要。
我假设这将需要订阅我们的actions对象,该对象使用以下代码通过window对象暴露给cypress。
import { Component, OnInit } from '@angular/core';
import { Actions } from '@ngrx/effects';
@Component({
selector: 'application-initialize-cypress-variables-component',
templateUrl: './initialize-cypress-variables.component.html',
})
export class InitializeCypressVariablesComponent implements OnInit {
public constructor(private readonly actions: Actions) { }
public ngOnInit(): void {
if (window.top.Cypress) {
window.actions = this.actions;
}
}
}
然后在cypress中订阅这个对象就非常简单了,我们只需要在每次我们的应用程序dispacted一个action时使用cy.log,这可以通过在window.action的subscribe块中添加cy.log来完成。
actions.subscribe((action) => {
cy.log(action.type);
});
这可以正常工作,并将每个正在处理的redux操作作为实时提要注销到cypress控制台。问题是我得到了这个控制台错误,它说了一些沿着的话:“Cypress detected that you returned a promise from a command while also invoked one or more cy commands in that promise”as the actions are being logged out.这让我觉得我做错了什么。Any idea?
1条答案
按热度按时间4zcjmb1e1#
这可能根本不可能,因为Cypress命令在它们自己的队列中异步运行。
这意味着当你的javascript发出一个
cy.log(some-param)
调用时,它说的是“在所有前面的命令运行之后为some-param添加一个日志条目”,但它实际上并没有在那个时间点执行日志。你可以用Cypress.log()来做,因为它会立即运行。
但请注意,Cypress命令队列和redux操作队列都与测试运行器的Javascript异步。
我想你需要一些东西来同步这两者,一些在测试中执行一个步骤,然后等待结果redux动作完成的东西。