Pregunta

Tengo Zend_Soap_Server. Debe ser probado. Un tema - modos de pruebas unitarias y de desarrollo deben trabajar con diferentes bases de datos. Se puede hacer a través de .htaccess:

SetEnvIfNoCase User-Agent (.*) APPLICATION_ENV=development
SetEnvIfNoCase User-Agent testing APPLICATION_ENV=testing

funcionaría bien para mí, yo uso Zend_Soap_Client como está para el modo de desarrollo / producción, y añadir parámetro adicional para la prueba. No hay cambios especiales en el código fuente para las pruebas de apoyo. El problema - no puede establecer la costumbre de agente de usuario para ( Zend_Soap_Client Parece que este parámetro no es compatible o no está documentada. Traté de hacer lo mismo a través de mod_rewrite y añadiendo

new Zend_Soap_Client('...?wsdl&testing');

pero requiere cambiar Zend_Soap_Server para apoyar query_string prueba, de lo contrario jabón acciones no se reflejan con 'prueba' fuera del WSDL. No es bueno en mi opinión.

Estoy de acuerdo que es un poco más relacionados con las pruebas de aceptación, no la unidad (no tengo pruebas para las clases como $server->setClass('classWS')), pero de todos modos, lo necesito, independientemente de la terminología.

Por lo tanto, lo que funcionaría bien para mí es algo como:

new Zend_Soap_Client($wsdl, array('useragent' => 'testing'));

en pruebas.

¿Fue útil?

Solución

Es posible, sino que es un poco más complicado que sólo la creación de una opción. La clave está en un contexto de secuencia . La función requerida es stream_context_create() - por favor, también tienen una mira opciones de contexto "HTTP" .

$context = stream_context_create(array(
    'http' => array(
        'user_agent' => 'testing'
    )
);
$client = new Zend_Soap_Client($wsdl, array('stream_context' => $context));

// or set option after instatiation
$client->setStreamContext($context);

EDIT:

A medida que el contexto de secuencia de agente de usuario parece que se reemplaza otra opción es utilizar la opción-user_agent de SoapClient sí. Pero esto es un poco más complicado ya que esta opción no está expuesto por Zend_Soap_Client.

$client = new Zend_Soap_Client($wsdl);
$options = array_merge($client->getOptions(), array(
    'trace'      => true,
    'user_agent' => 'testing'
));
$soapClient = new Zend_Soap_Client_Common(array($client, '_doRequest'), $wsdl, $options);
$client->setSoapClient($soapClient);

El código anterior es más o menos un extracto de lo que sucede en Zend_Soap_Client::_initSoapClientObject() que inicializa el SoapClient predeterminada cuando se ha registrado ningún objeto personalizado.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top