【发布时间】:2017-10-31 03:09:00
【问题描述】:
我刚刚注意到我们不能在测试数据提供程序中使用日期修改器。示例
class FooTest extends TestCase {
/**
* @dataProvider baz
*/
public function testBar($baz) {
$this->assertTrue(true);
}
public function baz() {
$model = new Foo(['someDate' => \Carbon\Carbon::now());
return [
[$model]
];
}
}
鉴于你的模型是这样的
class Foo extends Model {
public function getDates() {
return ['someDate'];
}
}
该测试将产生以下错误
PHP Fatal error: Call to a member function connection() on null in /var/www/agents/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php on line 3224
那是因为在 eloquent 模型中我们有
protected function getDateFormat()
{
return $this->dateFormat ?: $this->getConnection()->getQueryGrammar()->getDateFormat();
}
正在尝试访问未在测试数据提供程序中建立的连接。
那么,我们应该如何为testBar() 方法提供输入模型?
【问题讨论】:
-
您有什么理由不使用工厂来使用伪造方法创建带有伪造数据的模型实例?
-
我需要控制模型中的数据,以便提供重要的输入数据。这有什么关系?
标签: php laravel laravel-5 phpunit