ci-php-unit-testライブラリを使用して、PHP/codeigniterのユニットテストやユニットテストのコントローラメソッドを実行します。PHP/Codeigniterで外部ライブラリをモックする
コンポーザを使用してインストールされた外部ライブラリの模擬方法を試すのに問題があります。
私のSUTの方法は次のとおりです。
public function test_twitter()
{
$_SESSION['twitter_oauth_token'] = 'twitter_oauth_token';
$_SESSION['twitter_oauth_token_secret'] = 'twitter_oauth_token_secret';
$this->request->setCallable(
function (& $CI) {
// Get mock object
$twitter_oa = $this->getMockBuilder('TwitterOAuth')
->disableOriginalConstructor()
->setMethods(['oauth'])
->getMock();
$twitter_oa->method('oauth')
->willReturn('access_token');
}
);
$output = $this->request('GET','callbacks/twitter',['oauth_token'=>'twitter_oauth_token']);
var_export($output);
}
しかし、それは嘲笑されていないので、元のライブラリが実行されている - $twitter_oa
ISN:
function twitter()
{
$this->load->model('misc/twitter_model');
$request_token = [];
$request_token['oauth_token'] = $_SESSION['twitter_oauth_token'];
$request_token['oauth_token_secret'] = $_SESSION['twitter_oauth_token_secret'];
if ((isset($_GET['oauth_token'])
&& ($request_token['oauth_token'] !== $_GET['oauth_token'])))
{
log_message('info','abort something is wrong!');
}
else
{
$connection = new Abraham\TwitterOAuth\TwitterOAuth(TWITTER_CONSUMER_KEY, TWITTER_CONSUMER_SECRET, $request_token['oauth_token'], $request_token['oauth_token_secret']);
$access_token = $connection->oauth("oauth/access_token", array("oauth_verifier" => $_REQUEST['oauth_verifier']));
$this->session->set_userdata('twitter_access_token',$access_token);
redirect(get_session('twitter_callback1'));
}
}
私のテスト方法は(今のところ)でありますCIインスタンスにアタッチされていません。
これは、コード・ライター・コントローラーのインスタンス化後に外部ライブラリーがインスタンス化されていないためです。 (これはsetCallableメソッドであった)
私の質問は、codeigniterコントローラがインスタンス化された後にTwitterOAuthを模擬して、設定されたテストテキストを返すことができますか? (もちろん、TwitterのOauthライブラリをインスタンス化しないでください)