Bagaimana untuk mengejek Mage::getSingleton('checkout/cart') dalam php-unit?
P粉244730625
P粉244730625 2024-04-03 13:48:23
0
1
519

Saya mempunyai kaedah foo() ini dan saya perlu menambah kes ujian unit untuk kaedah ini testFoo() dalam Magento. Tetapi Mage::getSingleton('checkout/cart') tidak boleh disimulasikan.

Kaedah sumber

public function foo()
{
    return Mage::getSingleton('checkout/cart')->getQuote()->getFunctionName();
}

Fungsi ujian

public function testFoo(): void
{
    //$this->className :: Project_Catalog_Helper_Test
    $expected = 'string';
    $this->className->method('getSingleton')->willReturn($this->cart);
    $this->cart->method('getQuote')->willReturn($this->cart);
    $this->cart->method('getFunctionName')->willReturn('string');
    $this->assertEquals(
        $this->className->foo(),
        $expected
    );
}

Apabila saya menjalankan php-unit saya mendapat log ralat ini.

MacBook-Pro % ./vendor/bin/phpunit tests/src/app/code/local/project/Catalog/Helper/OrderTest.php
PHPUnit 6.5.14 by Sebastian Bergmann and contributors.

Runtime:       PHP 7.3.11
Configuration: /project_path/phpunit.xml.dist

E                                                                   1 / 1 (100%)

Time: 150 ms, Memory: 8.00MB

There was 1 error:

1) Project_Catalog_Helper_Test::testFoo
Error: Call to a member function getCode() on bool

/project_path/app/code/core/Mage/Customer/Model/Session.php:103
/project_path/app/code/core/Mage/Core/Model/Config.php:1394
/project_path/app/Mage.php:517
/project_path/app/Mage.php:531
/project_path/app/code/community/Checkout/Model/Cart.php:20
/project_path/app/code/local/project/Catalog/Helper/Order.php:21
/project_path/tests/src/app/code/local/project/Catalog/Helper/OrderTest.php:100
/project_path/vendor/phpunit/phpunit/phpunit:53

Perlukan beberapa penyelesaian, cara mensimulasikan Mage::getSingleton('checkout/cart').

Nota: Saya tidak boleh menukar kaedah utama kerana ia adalah kod warisan. Hanya tambah kes ujian unit.

P粉244730625
P粉244730625

membalas semua(1)
P粉588152636

Anda tidak boleh mengejek Mage::getSingleton('checkout/cart') kerana ia adalah fungsi statik dalam ruang nama global.

Namun, anda boleh menyuntik olok-olok menggunakan metaprogrammingsuntik olok-olok kad pembayaran. Kemudian pulihkan singleton asal di lokasi tersebut.

Bandingkan dengan Soal Jawab sedia ada yang diwarisi daripada EComDev Testsuite, yang sepatutnya mempunyai lebih banyak petunjuk tentang cara mengendalikan struktur dalaman menggunakan PHP Reflection.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan