当前路径:vendor/topthink/framework/tests/EventTest.php <?php namespace think\tests; use Mockery as m; use Mockery\MockInterface; use PHPUnit\Framework\TestCase; use think\App; use think\Config; use think\Container; use think\Event; class EventTest extends TestCase { /** @var App|MockInterface */ protected $app; /** @var Event|MockInterface */ protected $event; /** @var Config|MockInterface */ protected $config; protected function tearDown(): void { m::close(); } protected function setUp() { $this->app = m::mock(App::class)->makePartial(); Container::setInstance($this->app); $this->app->shouldReceive('make')->with(App::class)->andReturn($this->app); $this->config = m::mock(Config::class)->makePartial(); $this->app->shouldReceive('get')->with('config')->andReturn($this->config); $this->event = new Event($this->app); } public function testBasic() { $this->event->bind(['foo' => 'baz']); $this->event->listen('foo', function ($bar) { $this->assertEquals('bar', $bar); }); $this->assertTrue($this->event->hasListener('foo')); $this->event->trigger('baz', 'bar'); $this->event->remove('foo'); $this->assertFalse($this->event->hasListener('foo')); } public function testOnceEvent() { $this->event->listen('AppInit', function ($bar) { $this->assertEquals('bar', $bar); return 'foo'; }); $this->assertEquals('foo', $this->event->trigger('AppInit', 'bar', true)); $this->assertEquals(['foo'], $this->event->trigger('AppInit', 'bar')); } public function testClassListener() { $listener = m::mock("overload:SomeListener", TestListener::class); $listener->shouldReceive('handle')->andReturnTrue(); $this->event->listen('some', "SomeListener"); $this->assertTrue($this->event->until('some')); } public function testSubscribe() { $listener = m::mock("overload:SomeListener", TestListener::class); $listener->shouldReceive('subscribe')->andReturnUsing(function (Event $event) use ($listener) { $listener->shouldReceive('onBar')->once()->andReturnFalse(); $event->listenEvents(['SomeListener::onBar' => [[$listener, 'onBar']]]); }); $this->event->subscribe('SomeListener'); $this->assertTrue($this->event->hasListener('SomeListener::onBar')); $this->event->trigger('SomeListener::onBar'); } public function testAutoObserve() { $listener = m::mock("overload:SomeListener", TestListener::class); $listener->shouldReceive('onBar')->once(); $this->app->shouldReceive('make')->with('SomeListener')->andReturn($listener); $this->event->observe('SomeListener'); $this->event->trigger('bar'); } } class TestListener { public function handle() { } public function onBar() { } public function onFoo() { } public function subscribe() { } }
相关源码
- 可旋转的彩色立方体C#源代码2021-10-29
- 在线考试系统2021-10-15
- EduSoho开源网校系统源码2019-06-27
- 仿拼多多小程序商城源码2019-06-06
- PHP5网站运行监测系统源码2017-04-14
关于我们 | 顾问团队 | 发展历程 | 联系我们 | 源码上传
联系电话(Tel):4008-010-151(免长途)
地址:北京市海淀区大恒科技大厦五层 邮编:100080
Floor 5th,Daheng Building,Zhongguancun,Beijing,China,100080
51Aspx.com 版权所有 CopyRight © 2006-2023. 京ICP备09089570号 | 京公网安备11010702000869号
联系电话(Tel):4008-010-151(免长途)
地址:北京市海淀区大恒科技大厦五层 邮编:100080
Floor 5th,Daheng Building,Zhongguancun,Beijing,China,100080
51Aspx.com 版权所有 CopyRight © 2006-2023. 京ICP备09089570号 | 京公网安备11010702000869号