Jasmine 摩卡和柴量角器

Jasmine 摩卡和柴量角器,jasmine,mocha.js,protractor,chai,chai-as-promised,Jasmine,Mocha.js,Protractor,Chai,Chai As Promised,我开始使用量角器,我尝试做的第一件事是用摩卡咖啡和柴代替茉莉花。虽然现在我不确定这是不是个好主意 首先,我需要使Chai可以从所有spec文件访问,而不必每次导入,我发现可以在dragrator.conf文件中执行以下操作: onPrepare: -> global.chai = require 'chai' chai.use require 'chai-string' chai.use require 'chai-as-promised'

我开始使用量角器,我尝试做的第一件事是用摩卡咖啡和柴代替茉莉花。虽然现在我不确定这是不是个好主意

首先,我需要使Chai可以从所有spec文件访问,而不必每次导入,我发现可以在dragrator.conf文件中执行以下操作:

  onPrepare: ->
      global.chai = require 'chai'
      chai.use require 'chai-string'
      chai.use require 'chai-as-promised'
      global.expect = chai.expect
现在在这样的规范中:

  it "when clicked should sort ",->
      headerColumns.get(0).click()
      firstCellText = $$(".first-cell").getText()
      secondCellText = $$(".second-cell").getText()

      # this won't work
      expect(firstCellText).eventually.be.above(secondCellText)             
为了让它发挥作用,我可以做:

    # now this works
    $$(".second-cell").getText().then (secondCellText)->
        expect(firstCellText).eventually.be.above(secondCellText)             

但是那太难看了,我不想把东西一直包在
里面。我在想应该有更好的方法(?)

我也有同样的问题。对我来说,问题是通过progrator config.js向mocha添加更长的超时

这是因为量角器测试相对于其他模块(如supertest)需要更长的时间,因为实际的浏览器正在与之交互

我补充说

  mochaOpts: {
   timeout: 5000
  }

当我试图在TypeScript中做同样的事情时,我发现了这个问题,但是在
grandor.conf.js
中的方法是相同的

让chai在全球范围内可用 看来要做到这一点,你是对的,这需要在准备阶段完成。下面是一个相当简洁的例子。据我所知,这是必要的,因为柴当然不是摩卡的一部分,而是一些我们可以与摩卡一起使用的额外糖果。与jasmine不同,jasmine将所有内容捆绑到框架中

progrator.conf.js片段 示例规范 一旦您在全球范围内获得了chai和chai承诺的设置,您需要在规范中添加一个“小”锅炉板,以公开来自chai的
expect

示例e2e-spec.ts片段 回避 我不知道您的
$$
引用是什么,但是如果您使用的是量角器组件
浏览器
by
等,那么事情会有一点好转

调用
consttitle=element(by.css('app-root h1')).getText()似乎返回了一个承诺,而茉莉花似乎是开箱即用,而摩卡+柴则不是。这就是柴的承诺

使用我们的附加语法candy
expect(title).to.finally.contain('awesome title')
非常巧妙地解决了承诺,我们避免了所有那些
然后
调用,但我们确实需要
最终

我已经为您提供了一个指向工作类型脚本的链接,这可能有助于演示


我希望这能帮助找到这个老问题的人。

或者您需要在描述块下面使用“this.timeout(1000);”来提及整个测试套件的超时,或者您可以通过为每个“it”块显式定义超时来更改单个测试用例的超时

描述块的示例

describe("test-suite",function () {
    this.timeout(5000);
    it("test-case",function () {
       //test case code goes here 
    });
});
it("test-case",function () {
        this.timeout("20000");
    });
it块示例

describe("test-suite",function () {
    this.timeout(5000);
    it("test-case",function () {
       //test case code goes here 
    });
});
it("test-case",function () {
        this.timeout("20000");
    });