2017-09-23 67 views
0

我有這樣的文件:看點模擬不超載方法codeception

/src/Api.php

<?php 

namespace src; 

class Api { 
    function apiCall() 
    { 
     return 'api_result'; 
    } 
} 

/tests/_bootstrap.php

<?php 

include __DIR__.'/../vendor/autoload.php'; // composer autoload 

$kernel = \AspectMock\Kernel::getInstance(); 
$kernel->init([ 
    'debug' => true, 
    'includePaths' => [__DIR__.'/../src'], 
    'cacheDir' => __DIR__ . '/aspectCache' 
]); 

codeception.yml

paths: 
    tests: tests 
    output: tests/_output 
    data: tests/_data 
    support: tests/_support 
    envs: tests/_envs 
actor_suffix: Tester 
extensions: 
    enabled: 
     - Codeception\Extension\RunFailed 

settings: 
    bootstrap: _bootstrap.php 

composer.json

{ 
    "require-dev": { 
     "codeception/aspect-mock": "*", 
     "codeception/codeception": "^2.3" 
    }, 

    "autoload": { 
     "psr-4": { 
      "": "src/" 
     } 
    } 
} 

的index.php

<?php 

require_once "vendor/autoload.php"; 

use src\Api; 

$api = new Api(); 
echo $api->apiCall(); 
echo 'test'; 

/tests/acceptance/FirstCest.php

<?php 

use AspectMock\Test as test; 
use src\Api; 

class FirstCest 
{ 
    public function frontpageWorks(AcceptanceTester $I) 
    { 
     $I->amOnPage('/'); 

     test::double(Api::class, ['apiCall' => 'mock']); 

     $I->see('mocktest'); 
    } 
} 

當我在瀏覽器中加載頁面我看到字符串 'api_resulttest'

現在,當我嘲笑apiCall函數,輸出應該是'mocktest'。

我運行命令

php codecept.phar run --steps -d 

和測試失敗,我還是看到了輸出 'api_resulttest'。

爲什麼?我能正確使用它嗎? https://github.com/Codeception/AspectMock這裏它不顯示如何在代碼測試中使用它。

或者請告訴別的方法 - 我應該如何在代碼中模擬api調用?那就是我想要做的。

我已經推入到位桶,所以你可以測試的例子: https://bitbucket.org/darius_v/codeception_mock/src

更新2017年10 01 現在去除方面模仿我的最新提交。

回答

0

PhpBrowser通過HTTP向您的網站提出請求,因此測試代碼中設置的模擬對應用程序代碼沒有影響。

如果您正在使用框架模塊,則模擬工作在單元測試和功能測試中。

+0

好吧,但如果我沒有像這個測試應用程序框架,仍然應該有可能嘲笑,不應該嗎? –

+0

是的,如果您使用常規單元測試而不是使用PhpBrowser。 – Naktibalda