Laravel5,PHPUnit和Date Mutators:不能在数据提供程序中使用mutator

时间:2017-05-30 14:58:32

标签: php laravel laravel-5 phpunit

我刚才注意到我们不能在测试数据提供程序中使用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()方法提供输入模型?

1 个答案:

答案 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]
    ];
}