简单重构

在开始新的任务之前,先优化一下已经写好的测试代码。在CreateThreadsTest.php中,guests_may_not_create_threadsguests_cannot_see_the_create_thread_page测试的内容基本是差不多的,都是测试未登录用户的逻辑。可以将其合并为一个方法。

这样是不是比原来的简洁多了?

相信大家都逛过不少的论坛,每个论坛必不可少的是分类、或者叫频道。下面先建立对应的测试文件代码。

由于我们还没有创建Channel的模型以及对应的Eloquent关系。输入下面的命令创建对应的文件。

此时进行测试会发现,虽然我们建立了对应的模型和Eloquent关系,但是还是测试失败。这是因为我们的数据库里threads表中还没有与之对应的外键channel_id

修改好对应的迁移文件和ModelFactory代码之后,重新执行迁移命令和seed命令来处理数据库。然后输入下面的命令测试通过。

但是如果我们进行所有的测试的话,会发现无法通过测试,具体的是CreateThreadsTest中的an_authenticated_user_can_create_new_forum_threads方法。这是因为我们新添加了channel_id,但是目前的store方法并没有添加channel_id这一字段,下面进行修复。

修改之后,测试通过。

我们现在访问帖子的路径是/threads/{id},在加入channel之后,期望的路径应该是/threads/channel-slug/{id}这种。下面是测试代码

此时,进行测试肯定是会失败的。因为我们的path目前还是/thread/{id}。下面进行修复。

修改完毕,测试通过(具体还有其他的细微修改,可以通过文章最底部的GitHub链接来查看)。

How to Test Validation Errors

到目前为止我们所有的store方法只是进行了数据添加和存储,并没有对数据进行验证。下面将完善这一细节。

上面的测试代码表示如果我们在新建thread的时候,如果title字段为空,则会抛出错误。此时测试通过。下面对这个测试方法进行优化一下,因为我们不只是需要测试title这一个字段,还需要测试其他的字段。优化后的代码如下。

重构之后的代码我们提取出一个publishThread方法,在每个测试方法里进行简单修改就可以重复利用。此时测试通过。同理,添加回复的验证测试也需要进行添加,具体代码请上GitHub进行查看。

本次代码地址https://github.com/SimuraEpona/forum/tree/Article-5

发表评论

电子邮件地址不会被公开。 必填项已用*标注