我发现CakePhp 3在集成测试中使用了真正的数据库连接,因此即使提供了fixture,像$this->post('articles/delete/1')
这样的行也会删除真正的db行。是否可以仅使用灯具提供的数据(测试连接)?使用测试连接,模型测试正常使用夹具。
答案 0 :(得分:0)
CakePHP在基于夹具的测试用例过程中执行以下操作:
1. Creates tables for each of the fixtures needed.
2. Populates tables with data, if data is provided in fixture.
3. Runs test methods.
4. Empties the fixture tables.
5. Removes fixture tables from database.
正如cake documentation中提到的那样,cakephp清空了夹具表,无论是删除记录还是保存记录或进行任何其他操作。
答案 1 :(得分:0)
我找到了解决问题的原因。
在我的bootstrap.php中,我将事件监听器绑定到app事件。在listener的构造函数中,我使用TableRegistry :: get()。
使用模型对象初始化属性原因是TableRegistry会记住在第一次调用时使用的连接,这样ConnectionManager :: alias()就不起作用了。因为我在事件的构造函数中初始化了TableRegistry,所以在主应用程序加载和fixtureManager添加连接别名之前调用它。
所以在加载app之前永远不要调用TableRegistry,否则可能会导致问题。