基本上我必须为许多Laravel控制器编写测试,其中大多数是CRUD(读取,存储,更新),并且大多数逻辑都放在那些内部(继承代码,而不是我的).
我需要做的是从用户的角度自动化测试.因此,我需要点击所有端点并针对真实数据库进行测试,并检查一切是否正常.
我几乎没有测试经验,但从我收集的控制器应该通过集成/验收测试进行测试.现在我通过扩展Laravel的TestCase测试Read方法做得很好,这是一个例子:
class SongsTest extends TestCase
{
public function testBasicIndex()
{
$arguments = [];
$response = $this->call('GET', '/songs', $arguments);
$this->assertResponseOk();
$this->seeJson();
}
/**
* @dataProvider providerSearchQuery
*/
public function testSearchIndex($query)
{
$arguments = ['srquery' => $query];
$response = $this->call('GET', '/songs', $arguments);
$this->assertResponseOk();
$this->seeJson();
}
public function providerSearchQuery()
{
return array(
array('a'),
array('as%+='),
array('test?Someqsdag8hj$%$')
);
}
public function testGetSongsById()
{
$id = 1;
$response = $this->call('GET', '/songs/' . $id);
$this->assertContains($response->getStatusCode(), [200, 404]);
$this->seeJson();
if($response->getStatusCode() == 404)
{
$content = json_decode($response->getContent());
$this->assertContains($content->message[0], ['Song not found', 'Item not active']);
}
}
}
这些测试命中了端点并检查响应是否为200,格式是JSON还是其他一些东西.这些工作正常.
我遇到的问题是:
比方说,我们有一个UserController和一个创建用户的方法.之后,应该在TokensController中使用所述用户来创建一个令牌,该令牌应该以某种方式被记住并在将来使用令牌保护请求的测试中使用.
我的问题 :
我如何自动化:通过在测试数据库中创建真实用户(无需模拟)测试UserController的存储方法,使用该用户的电子邮件测试TokensController的存储方法,使用创建的令牌测试其他控制器并在测试完成后删除,所以它可以再次执行.
我无法概念化所有这些,因为我还没有真正做过多少测试.