因此,我们刚刚介绍了Cucumber + Gherkin,以便在我们相当新鲜的Angular2项目中探索e2e测试。我们决定在JS中编写步骤定义。我试图在步骤定义中相当通用。 这就是我想要实现的目标:
我们有
this.Then(/^I should see (.*) on the page$/, function(componentName, callback) {
expect(element(by.id(componentName)).isPresent()).to.eventually.be.true;
setTimeout(callback, 1000);
});
我还想以下列形式允许定义:
Then I should not see Results on the page
表示不应显示某些元素。任何优雅的方式,甚至可以使用内置的工具吗?文档和谷歌搜索只给了我在描述中包含true/false
的内容。我有一种感觉,即使我们预先弄清楚这种事情,否则c' p会使我们的步骤定义超快速增长并且不必要地进行维护。
如果您认为这是一个愚蠢的想法,请阻止我,如果是这样,请告诉我原因。
答案 0 :(得分:1)
您可以抓住关键字' not'在您的步骤中,在步骤实现中实现两个路径,并选择正确的条件。
但是,我不会这样做而是接受两个步骤。这将使您的代码更易于阅读,因此不易出错。我会努力使步骤成为单行并将执行委托给助手类。辅助类可以有两种方式,正面情况和负面情况。它也可以处理你似乎做的超时等事情。
重新编写代码,我会尝试这样的事情:
this.Then(/^I should see (.*) on the page$/, function(componentName) {
isPresent(componentName);
});
负面情况为
this.Then(/^I should not see (.*) on the page$/, function(componentName) {
isNotPresent(componentName);
});
我不熟悉JavaScript,所以这可能不是Javascript方式。但我会努力将潜在的常见细节推送给帮手,并尽量减少Gherkin和JavaScript之间所需的胶水代码。