我刚才注意到我们不能在测试数据提供程序中使用date mutators。实施例
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
那是因为在雄辩的模型中我们有
protected function getDateFormat()
{
return $this->dateFormat ?: $this->getConnection()->getQueryGrammar()->getDateFormat();
}
尝试访问未在测试数据提供程序中建立的连接。
那么,我们应该如何为testBar()
方法提供输入模型?
答案 0 :(得分:0)
您必须在dataProvider中运行它。这是因为它在运行CreateApplication代码之前获取dataProvider数据。如果运行单个测试,这也可以生成The data provider specified for x is invalid.
PHPStorm只会说No tests executed!
。
public function baz() {
$this->refreshApplication();
$model = new Foo(['someDate' => \Carbon\Carbon::now());
return [
[$model]
];
}