我目前正在编写有关Trait的单元测试。该特性包括一个称为registryPersist()的方法,该方法后来又调用了一个名为Registry :: persist()的Facade方法。顾名思义,此方法将注册表值保存到数据库,然后调用Registry :: set()以便将注册表设置为本地范围。这是一个相当简单的过程。
我尝试遵循Laravel文档的建议,并使用以下代码模拟Registry :: persist()方法:
Registry::shouldReceive('persist')->with('test', 'ok', 'model.users')
但是考虑到 persist 也调用 set ,我得到了 BadMethodCallException 异常,因为没有模拟 set 。 (收到RegistryAccessControl :: set(),但未指定期望值)
官方的嘲讽文档建议创建一个模拟实例,但是无论如何这都不起作用,因为当我实际尝试调用Trait方法时,不会对外观进行模拟。
$user = factory(User::class)->create();
$user->registrySet('test', 'ok');
特质方法:
public function registryPersist(string $name, $value): void
{
Registry::persist(
$name,
$value,
$this->getNamespace()
);
}
有什么方法可以有效地测试这种方法?
此外,考虑到 registrySet()仅将参数转发给Facade,您认为尝试编写的测试是一个好主意吗?
谢谢。