cari
Soal Jawab Bagaimana untuk mengejek Mage::getSingleton('checkout/cart') dalam php-unit?

0

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.

Your Answer
serahkan

1 jawapan
0

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.

2024-04-04 11:05:45

serahkan

Hot Tools

vc9-vc14 (32+64 bit) koleksi perpustakaan masa jalan (pautan di bawah)

vc9-vc14 (32+64 bit) koleksi perpustakaan masa jalan (pautan di bawah)

Muat turun koleksi perpustakaan runtime yang diperlukan untuk pemasangan phpStudy

VC9 32-bit

VC9 32-bit

VC9 32-bit phpstudy pustaka masa jalan persekitaran pemasangan bersepadu

Kotak alat pengaturcara PHP versi penuh

Kotak alat pengaturcara PHP versi penuh

Programmer Toolbox v1.0 PHP Persekitaran Bersepadu

VC11 32-bit

VC11 32-bit

VC11 32-bit phpstudy pustaka masa jalan persekitaran pemasangan bersepadu

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan