创建回复表单

在上一篇文章中,我们虽然对Reply通过了测试,但是我们还没有添加回复表单。下面我们处理这件事情。在threads/show.blade.php中加入以下代码。

这样就如果是登录用户,可以正常发表回复。如果未登录,则会提示进行登录。

A User May Publish Threads

现在我们可以继续进行下一步了。我们开始进行发表帖子,首先创建测试文件。

上面的方法表示,新注册一个用户并登录,然后新建thread,通过threads路由以POST方式来提交数据。提交完成后查看对应的详情,期待返回指定数据。第二个测试方法是测试未登录用户提交POST路由会返回登录错误。

此时测试肯定会失败,那是因为我们还没有在路由种定义POST方式的thread路由。下面我们来一步步的进行处理。

修改好文件之后,进行测试,测试通过。

添加测试辅助方法

虽然我们的测试通过了,但是测试代码比较臃肿。比如,在每个测试文件里都有一个use DatabaseMigrations;。让我们先重构优化一下目前的代码并且添加一些通用的测试辅助方法。

按照上面修改项目composer.json之后,新建tests/utilities/functions.php文件。

代码修改完毕之后,在命令行中输入composer dump-autoload使之生效。此时,测试代码中的相关代码可以按照下面的样式进行修改。

每次需要测试登录用户的时候,都需要$this->actingAs(create(User::class));来进行登录测试。为了简化代码数量,在TestCase.php文件下新建一个signIn方法,代码如下。修改之后,在其他代码中可以使用$this->signIn()来表示登录了。

The Exception Handling Conundrum

接下来,我们开始写新建Thread表单的代码。我们需要新建threads/create路由,但是我们其他的threads路由也有不少了。在Laravel中提供了一个resource路由方法来表示一个符合RESTFUL API设计的Resourceful路由。具体如下。

resource方法会自动生成7个路由,我们可以输入命令进行查看。

接着添加控制器方法以及对应的blade模版。

由于之前我们已经写好添加Thread的单元测试并且测试通过。因此可以成功发表Thread了。最后,我们写一个未登录用户无法查看create页面的测试。

虽然测试代码是正确的,但是由于Laravel的机制,会导致测试失败。这是由于我们之前在app/Exception/Handler.php中的if (app()->environment() === 'testing') throw $exception;这一行代码原因,如果注释掉这一行进行测试,那么测试会通过。为了解决这一问题,我们需要按照这边文章进行修改。具体改动地方可以看我提交到GitHub的代码。同时上面的测试代码按照下面的示例进行修改,修改之后测试通过。

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

发表评论

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