代码之家  ›  专栏  ›  技术社区  ›  Fredrik

Laravel+嘲弄无效计数异常

  •  0
  • Fredrik  · 技术社区  · 5 年前

    a class 防止它调用第三方API。但是在设置模拟时,它似乎不会影响控制器的操作。我确实试过换新的 $this->postJson() 通过手动创建 Request -及 OEmbedController create()

    我做错了什么?

    Mockery\Exception\InvalidCountException:Mockery_2_Embed_Embed中的方法create()应精确调用1次,但调用0次。

    class OEmbedTest extends TestCase
    {
        public function tearDown()
        {
            Mockery::close();
        }
    
        /**
         * It can return an OEmbed object
         * @test
         */
        public function it_can_return_an_o_embed_object()
        {
            $url = 'https://www.youtube.com/watch?v=9hUIxyE2Ns8';
    
            Mockery::mock(Embed::class)
                ->shouldReceive('create')
                ->with($url)
                ->once();
    
            $response = $this->postJson(route('oembed', ['url' => $url]));
            $response->assertSuccessful();
        }
    }
    

    控制器:

    public function __invoke(Request $request)
    {
        $info = Embed::create($request->url);
    
        $providers = $info->getProviders();
    
        $oembed = $providers['oembed'];
    
        return response()
            ->json($oembed
                ->getBag()
                ->getAll());
    }
    
    2 回复  |  直到 5 年前
        1
  •  0
  •   Namoshek    5 年前

    看来你是在嘲弄我 Embed 上课的方法不对。如果使用Laravel facade方法 shouldReceive()

    Embed::shouldReceive('create')
        ->with($url)
        ->once();
    

    而不是

    Mockery::mock(Embed::class)
        ->shouldReceive('create')
        ->with($url)
        ->once();
    

    with($url) ,嘲笑者认为自己没有必要。但无论如何,调用未定义的方法将收到另一个错误。

        2
  •  -1
  •   Fredrik    5 年前

    我能够通过在测试中使用这个来解决这个问题:

    protected function setUp()
    {
        parent::setUp();
    
        app()->instance(Embed::class, new FakeEmbed);
    }
    

    然后像这样解决它

    $embed = resolve(Embed::class);
    $embed = $embed->create($url);