【问题标题】:Knockout computed subscription is not triggered during cypress automation script赛普拉斯自动化脚本期间未触发淘汰赛计算订阅
【发布时间】:2018-12-27 11:19:04
【问题描述】:

我有两个文本框和一个显示结果的跨度。

Date: <input data-bind="value: dateValue"/>
Number: <input data-bind="value: dateValue"/>
Result : <span data-bind="text: calculatedValue">Result Should shown here</span>

KnockoutObservables 用于“日期”和“数字”输入字段。任何数字用户输入“3”,然后计算函数“将 3 天”添加到“输入的日期”。

Knockout Computed 订阅在“calculatedValue”上,即在结果跨度上。

上述功能在应用程序中运行良好,但在赛普拉斯自动化脚本期间,计算方法未正确触发或计算正确。 我在输入值中键入日期和数值。

但是计算结果什么也没显示。

注意:以上是伪代码。语法、绑定和计算逻辑非常好。应用程序运行良好。问题出在赛普拉斯自动化期间。

Cypress 脚本伪代码:-

cy.get("targetDateInput").clear().type("07/08/2018").type("{enter}");
cy.get("targetNumberInput").clear().type("6").type("{enter}");

cy.get("targetCalculatedValueDiv").children("span").should(($span) => {
    expect($span[0].innerHTML).to.contain("07/14/2018");
});

但它失败了。

【问题讨论】:

  • 您是否尝试在您的computed 中添加日志记录?如果没有,请添加console.log('someString') 以确保computed 不会触发。请更新您的结果。
  • 是的,今天我尝试将 console.log() 放在我的计算函数中,这些函数被调用进行计算,发现当测试失败时它们不会被触发,有时它们会被触发(随机测试是通过)。
  • 似乎有一个隐藏的错误导致了您所描述的内容。请将所有代码包装在 try-catch 块中,并将异常记录到控制台。我猜你会发现一些错误。

标签: typescript knockout.js cypress


【解决方案1】:

您可以在 jsfiddle 或其他沙箱上发布示例吗?

我认为,您可以尝试使用方法notifySubscribers()valueHasMutated() 来通知视图有关更改。

【讨论】:

  • 但是,它不仅仅在 cypress 自动化中工作 - 它在应用程序中工作得非常好。如果您打算在 cypress 脚本中使用 notifySubscribers() 或 value HasMutated() ,那么它将破坏自动化的责任。我发现了一件奇怪的事情。如果我保持开发工具(开发工具 - chrome)打开(注意:没有调试点)那么它工作正常并且使用相同的代码,如果我没有保持开发工具打开那么它不会触发,因此断言是失败的。如果你读了会很奇怪,但当我实际看到时我很震惊..
猜你喜欢
  • 1970-01-01
  • 2013-12-04
  • 1970-01-01
  • 2012-09-20
  • 2016-02-29
  • 2023-02-12
  • 2012-10-16
  • 2016-08-13
  • 2016-06-09
相关资源
最近更新 更多