# （二十一）断言




### 测试用例与断言

测试用例中至少需要包含1个断言，没有断言的测试脚本不能称为测试用例。

断言就是预期和实际的比较，如果预期不等于实际，脚本将会报错。

### selenium 自带断言

selenium 自带了一些断言，具体看[断言](http://seleniumhq.github.io/selenium/docs/api/javascript/module/selenium-webdriver/testing/assert_exports_Assertion.html)。

### 场景

我们下面实现打开[测试教程网](http://www.testclass.net/)并做2个断言

* 页面title包含测试教程网几个字
* 页面url包含testclass几个字

### 代码

```javascript
var webdriver = require('selenium-webdriver'),
  By = webdriver.By;

var assert = require('selenium-webdriver/testing/assert');

var dr = new webdriver.Builder().forBrowser('chrome').build();
dr.get('http://www.testclass.net/');

dr.getTitle().then(function(title) {
  assert(title).contains('测试教程网');
});

dr.getCurrentUrl().then(function(url) {
  assert(url).contains('testclass');
});

dr.quit()
```

### 运行结果

上面断言全部通过的时候看不到任何的结果，大家可以试着修改一下断言，让断言失败，这时候就应该可以看到类似下面的信息

```
AssertionError: 测试教程网 · 测试教程网.indexOf(测试教程网12443) !== -1
```

### 测试框架

在做真实的测试时，我们一般会用测试框架配合selenium一起来实现复杂的场景测试和测试报告的生成，在这里向大家推荐一些测试框架

* [mocha](https://github.com/mochajs/mocha): 强烈推荐，灵活简单，可以配合selenium断言一起用
* [qunit](https://github.com/qunitjs/qunit): 简单好用
* [jest](https://github.com/facebook/jest): facebook出品，大树底下好乘凉
* [tape](https://github.com/substack/tape): 足够简单




原始封面

![课程图片](https://images.unsplash.com/photo-1502957291543-d85480254bf8?w=300)


