21--Rails测试

自动化测试好处之一是保证功能的可用性,比如调用的一些接口变了或者数据结构变了我们不知道,有了测试就能很快发现这些问题,否则产品上线之后会有很多潜在的问题比如用户使用这个功能的时候才发现这个功能不能用了。

测试的第二个好处是测试重构是否存在问题(重构就是功能不变,代码结构改变)。重构不管你怎么重构,只要通过测试就说明功能没有问题。

写测试主要分两种,先写功能或者先写测试:

1、测试代码写起来很短的情况下比如静态页面的测试代码就很短我们就倾向于先写测试代码再去写静态页面。

2、功能不清楚,我们倾向于先写功能再去写测试,因为功能不能完全确定测试代码也不好写。

3、功能比较重要比如安全性功能,那么我们就先去写测试代码再去写让测试通过的功能,先写测试是为了保证重要功能能比较完备。

4、如果我们已经发现存在一些bug,那么我们就先针对bug写测试来修正这些问题。

5、不写测试的情况就是经常变动的代码,比如前端html页面需要经常变动毕竟htm标签什么的太多了,这种写测试太耗费时间也没必要。

6、在重构之前我们先写测试来测试里面可能出错的代码,然后再去重构。

rails框架中,一般先写控制器和模型的测试,之后再编写集成测试;而对于视图,我们就没必要去写测试了。

这节课就简单地去讲解一个控制器的测试编写办法,模型测试和集成测试就自己去找资料看好了。

我们知道网站一般有一个"关于"页面,用来显示作者、版权、声明等等,这种页面一般是静态页面(没有交互性),所以编写起来简单,我们这节课就讲一个关于页面和它的测试。

首先我们创建一个"关于"页面的控制器,

如上截图我们发现这个就是rails帮我自动生成的控制器测试文件,不需要我们手动去创建。前面我们创建的控制器也都有对应的测试文件如下

我们就看静态页面的测试文件就好:

里面除了测试类的定义,里面基本没有内容,注释部分是一个小例子我们先不去管它。

我们先来讲一下测试的本质:测试就是让代码模拟用户去和程序交互的过程,来跟踪和发现问题。

我们先写一个测试,然后再去写让这个测试通过的功能代码。既然我们要测试关于访问页面的情况,那么我们就需要去模拟对关于页面的访问请求,我们模拟这个请求再去看这个请求能不能执行,那么这样测试就基本完成了。Rails给我们提供了相关的语法去写测试。

首先我们写上关键字test(可以参考注释掉的例子去写测试),然后给测试起个名字比如"should test about",然后再do end语句块里面就能写上测试的内容:

测试内容要写什么?首先我们要去访问这个测试页面

get :about这句代码就是:
						

我们向about动作发送了一个get请求,而这个测试代码是属于StaticPagesController这个控制器对应的测试类(StaticPagesControllerTest)的,所以默认完整理解就是:我们向StaticPagesController这个控制器的about动作发送了一个get请求
						

下一行我们使用一个关键词叫"断言",来得到我们期望得到的响应是什么。

assert_response
					:success这句代码意思是:
							

我们期望about动作给我们返回一个success,这个success就是http响应码的一种抽象表示。
					

如上总结起来就是向StaticPagesController这个控制器的about动作发送了一个get请求,并确认返回的http响应码是success
					

那么这时候我们就要去运行测试了,但是运行测试之前我们要删除test文件夹下的其他测试相关文件,否则直接运行时会出错的,要删除的文件就是如下选中的那些:
					


				

这时候测试文件就只剩下static_pages_controller_test.rb这个文件了:

接下来我们在git控制台输入命令进行测试bundle exec rake test

视频得到结果为:

出现 1 errors说明这个测试失败了,说明我们功能有问题,测试没有通过。那么问题到底在哪呢?其实你不看这些信息也能知道错在哪----因为我们还没有给about添加路由,

意思也是说:没有about这个路由,这个路由对应控制器是static_pages。所以说用get方法根本访问不到这个action动作,所以测试肯定是通不过的。那么很简单我们去添加对应的路由信息就可以了在routes.rb文件加入如下:

然后再运行还是没有通过:

这个错误说的是在StaticPagesController控制器里面找不到about这个action,因为我们需要在控制器里有about这个动作才可以。如下我们去添加about这个action的代码(35行)如下:

这时候再运行一次如下:

还是报错,提示Missing Template也就是没有对应的模板也就是说没有对应的视图,我们通过命令行添加视图

结果就多出一个视图文件(里面全部空白,一行代码也没):

我们给视图添加代码如下:

保存然后再运行测试我们可以看到:

可以看到0 errors,一个断言(1 assertions)算是成功了。

我们还可以在浏览器中查看一下,以防测试通过却还是无法运行。先rails s,然后输入路由访问,结果如下:

这时页面显示正常,说明测试很好地帮我们完成了测试的目的了。测试这一块的内容很多,需要的话自己再去学习。

 

如下我们实际运行,连bundle exec rake test这句代码都出错,所以还是不建议在windows下运行ruby

 

关于不能使用coffeescriptapplication.js没有视频中的那两句代码,添加上去就报错。那是因为在视频一开始程序就无法运行,在刚开始的课程中我们就把这两句代码去掉了才能运行,并不是后来没有生成。

posted @ 2016-02-25 21:39  SixEvilDragon  阅读(497)  评论(0编辑  收藏  举报