Jasmine 摩卡和柴量角器
我开始使用量角器,我尝试做的第一件事是用摩卡咖啡和柴代替茉莉花。虽然现在我不确定这是不是个好主意 首先,我需要使Chai可以从所有spec文件访问,而不必每次导入,我发现可以在dragrator.conf文件中执行以下操作: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'
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()代码>似乎返回了一个承诺,而茉莉花似乎是开箱即用,而摩卡+柴则不是。这就是柴的承诺
使用我们的附加语法candyexpect(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");
});