在运行PHPUnit测试时,我希望能够转储输出,这样我就可以调试一两件事.
我尝试了以下(类似于PHPUnit手册示例);
class theTest extends PHPUnit_Framework_TestCase
{
/**
* @outputBuffering disabled
*/
public function testOutput() {
print_r("Hello World");
print "Ping";
echo "Pong";
$out = "Foo";
var_dump($out);
}
}
Run Code Online (Sandbox Code Playgroud)
结果如下:
PHPUnit @package_version@ by Sebastian Bergmann.
.
Time: 0 seconds, Memory: 3.00Mb
OK (1 test, 0 assertions)
Run Code Online (Sandbox Code Playgroud)
请注意,没有预期的输出.
我在2011年9月19日使用了HEAD版本的git repos.
产量php -version:
$ php -version
PHP 5.2.9 (cli) (built: Dec 8 2010 11:36:37)
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2009 Zend …Run Code Online (Sandbox Code Playgroud) 单元测试是测试一小段代码的方法(主要是单一方法).
集成测试是测试多个代码区域之间交互的测试(希望它们已经有了自己的单元测试).有时,部分测试代码需要其他代码以特定方式执行操作.这就是Mocks&Stubs的用武之地.因此,我们非常具体地模拟/删除部分代码.这使我们的集成测试可以预测地运行而没有副作用.
所有测试都应该能够独立运行而无需数据共享.如果需要数据共享,这表明系统没有足够的分离.
当与外部API(特别是将使用POST请求修改实时数据的RESTful API)进行交互时,我理解我们可以(应该?)模拟与该API的交互(在此答案中更加雄辩地说明)进行集成测试.我也理解我们可以单元测试与该API交互的各个组件(构造请求,解析结果,抛出错误等).我没有得到的是如何实际解决这个问题.
如何测试与具有副作用的外部API的交互?
一个完美的例子是Google的Content API用于购物.为了能够执行手头的任务,它需要大量的准备工作,然后执行实际请求,然后分析返回值.其中一些没有任何"沙盒"环境.
执行此操作的代码通常具有相当多的抽象层,例如:
<?php
class Request
{
public function setUrl(..){ /* ... */ }
public function setData(..){ /* ... */ }
public function setHeaders(..){ /* ... */ }
public function execute(..){
// Do some CURL request or some-such
}
public function wasSuccessful(){
// some test to see if the CURL request was successful
}
}
class GoogleAPIRequest
{
private $request;
abstract protected function …Run Code Online (Sandbox Code Playgroud) 我正在构建一个PHP系统,用户可以创建一个视觉上复杂的图像,最终要求为50kB或更低.
用户可以选择将文本打印到37个模板图像中的一个上,因此结果是单个平面图像.
文本可以是任何颜色和多种字体之一.这意味着最终图像可能非常复杂且不可预测(图像尺寸除外).
然后,我要求最终图像文件大小不超过50kB(这是一个外部要求,不能更改).
最后一个要求(同样是外部)是图像格式必须是.jpeg,.png或.gif.
我查看了GraphicsMagick文档,但无法找到任何能够设置文件大小并自动计算压缩的地方.
我已经考虑通过compress-> save->测试循环以编程方式执行此操作,但是我可以想象这将是处理器密集型的,因为我不一定能提前基于压缩来计算文件大小.这就是为什么我要问看看这个问题是否已经在GraphicsMagick中解决了.
编辑
要明确为什么有外部要求:
用户将利用该系统创建一个平面图像,然后将其保存到PC上.然后,此图片将上传到Adroll,以便在重定向广告系列中使用.
以下是Adroll对图像的要求.我的系统仅提供728x90,300x250和120x600图像尺寸.
编辑 2010年11月27日
由于GraphicsMagick似乎无法做到这一点,我愿意研究其他解决方案,例如直接与可能提供功能的压缩库(libpng等)接口.
作为最后的手段,我甚至可以看到能够实现这一目标并自己实现的算法.
作为类比,对于那些倾向于这样的人:
我追求A*的搜索:它有一个明确的起点/终点,并在最快的时间内找到最佳路线.
我希望避免的是广度/深度优先搜索:明确的起点/终点,但一旦找到局部最小值,可能不会达到最优解,并且有可能在计算上完全爆发.
.md在github.com上查看时,Github有助于将Markdown()文件呈现为HTML(例如,这个README.md).
查看任何其他源文件时,它显示为未呈现的源代码(例如,此.gitignore).一个方便的功能是通过单击行号直接链接到源中的一行(例如,像这样).
如何在Github上查看Markdown文件的未呈现源(因此我可以链接到源中的特定行)?
注意:我知道"Raw"按钮,但它没有提供任何一个很好的UI Github.
在尝试执行循环要求时,如何避免Lua 5.1的以下错误?
$ lua main.lua
lua: ./bar.lua:1: loop or previous error loading module 'foo'
stack traceback:
[C]: in function 'require'
./bar.lua:1: in main chunk
[C]: in function 'require'
./foo.lua:1: in main chunk
[C]: in function 'require'
main.lua:1: in main chunk
[C]: ?
Run Code Online (Sandbox Code Playgroud)
main.lua
require "foo"
require "bar"
print (Foo.getName())
print (Bar.getName())
Run Code Online (Sandbox Code Playgroud)
foo.lua
require 'bar'
Foo = {}
Foo.name = 'foo'
function Foo:getName()
return Foo.name .. Bar.name
end
Run Code Online (Sandbox Code Playgroud)
bar.lua
require 'foo'
Bar = {}
Bar.name = 'bar'
function Bar:getName() …Run Code Online (Sandbox Code Playgroud) 我有php/js软件(Piwik),它设置一个cookie来跟踪对网站的访问.
设置我们的站点(即;不是Piwik),以便将所有URL(资源除外)写回/public/index.php.
这样,我们的用户每个都获得一个唯一的URL,例如;
......等
为了跟踪Piwik中的每个用户URL ,我建议我需要将cookie中的路径设置为Apache映射到实际目录的路径.
由于我们没有为每个用户提供实际目录,因此我们无法执行此操作.
最后,我们继续在.htaccess中使用RewriteBase告诉Apache我们认为用户的URL是它自己的目录.
然而,这不足,因为似乎没有办法在不对"基础"进行硬编码的情况下使用RewriteBase.
我可以在.htaccess中做这样的事情吗? Francois Deschenes的回答说我不能这样做.
RewriteCond ^([^/]*)(/.*)?
RewriteBase %1
Run Code Online (Sandbox Code Playgroud)
我还有什么其他选择来确保将cookie的"路径"设置为用户的URL而不仅仅是"/"?
.htaccess in/contains;
RewriteRule ^(.*)$ /public/$1 [L]
Run Code Online (Sandbox Code Playgroud)
然后/ public中的.htaccess包含;
RewriteRule ^index\.php5/(.*)$ - [L]
RewriteRule ^index\.php5?(.*)$ - [L]
RewriteRule ^index\.php5$ - [L]
RewriteRule ^(.*)$ /public/index.php5 [L]
Run Code Online (Sandbox Code Playgroud)
请注意,对于已移动的路径等,这两个规则在开头都有其他规则.
感谢您的帮助!
按照Piwik文档中的建议,在JS Piwik对象上调用.setCookiePath().例如,对于URL http://www.example.com/user1,调用.setCookiePath('/ user1')并不会实际设置cookie的路径.
向 URL 添加尾部斜杠,然后调用.setCookiePath().例如,URL http://www.example.com/user1/然后调用.setCookiePath('/ user1')不会设置cookie的路径.
使用mod_rewrite,我可以在RewriteCond中指定RewriteBase吗? - 不幸的是,答案并不表示我是否可以使用当前路径作为基础.
如何在单页面应用程序中管理大量已过滤,已排序,分页的数据,这些应用程序还必须在资源受限的设备(例如,移动设备)上运行?
进一步来说; 我有一个1000多个地理编码的地方信息对象的数据集,它被过滤到地图视口中包含的数据集.由于移动设备的内存限制,我无法缓存整个数据集.但是,由于移动设备上的网络连接速度较慢,我希望最小化HTTP请求.
结合最大缓存和最小网络请求的最佳策略是什么?
我正在为澳大利亚潜在的大型(1000+)信息数据集构建地图拆分视图:
+----------------------------------------+-----------------------------+
| | +----------+ |
| | Sort By: |Suburb |\/| |
| | +----------+ |
| |+---------------------------+|
| _,__ .: || ||
| <* / | \ || Blah Blah ||
| .-./ |. : :, || ||
| / '-._/ \_ || Zoom Zip ||
| / ' \ || ||
| .' *: |+---------------------------+|
| .-' ; |+---------------------------+|
| | | || ||
| \ / || Bing Bong || …Run Code Online (Sandbox Code Playgroud) 我正在React中构建一个Isomorphic Application,它首先渲染一个组件服务器端,然后利用React的智能重新渲染浏览器端.
我遇到过这种情况,在React能够首先呈现浏览器端之前,DOM可能与React组件的状态不同步.这可能发生在用户使用慢速Internet连接时,react.js文件需要一段时间才能下载(这也是我构建同构应用程序的原因)
这是我放在一起展示这种情况的一个例子:http://jsfiddle.net/jesstelford/z4o44esb
var TodoItem = React.createClass({
// ...
render: function() {
return (
<label>
<input type="checkbox" defaultChecked={this.state.done} onChange={this.onChange} />
{this.props.name}
</label>
);
}
});
// User toggles checkbox ON here, before React is rendered browser-side
// render using React browser-side
var renderedComponent = React.render(component, document.getElementById('content'));
// Incorrectly outputs { done: false }
console.log('React state:', renderedComponent.state);
Run Code Online (Sandbox Code Playgroud)
我找到了一个可能的解决方案React refs:http …
使用时npm,我可以通过以下方式以非交互方式登录:
$ printf "jesstelford\n<password>\nexample@email.com\n" | npm login
Run Code Online (Sandbox Code Playgroud)
但是,一个类似的命令yarn挂起:
$ printf "jesstelford\nexample@email.com\n" | yarn login
yarn login v0.21.3
question npm username: jesstelford
question npm email:
Run Code Online (Sandbox Code Playgroud)
在交互模式下,我可以成功运行:
$ yarn login
yarn login v0.21.3
question npm username: jesstelford
question npm email: example@email.com
? Done in 22.53s.
Run Code Online (Sandbox Code Playgroud)
如何以yarn login非交互方式运行?
在一个相当复杂的应用程序中,我做了一些与refs 相关的更改,突然开始看到这个警告.
尽管这是一个警告,它正在破坏我的应用程序.
我正在使用React 16.3.0和next.js后端.
导致"意外光纤弹出"警告的原因是什么?
我想有一个PHPUnit Mock,它执行一个像normal一样的方法,但是在函数返回之前以某种方式修改返回值.
我有一组派生类,类似于下面:
abstract class Base
{
abstract protected function getUrl();
public function callUrl() {
$url = $this->getUrl();
// some code to call the URL here
}
}
class Foo extends Base
{
protected function getUrl() {
return "http://www.example.com/Foo";
}
}
class Bar extends Base
{
protected function getUrl() {
return "http://www.example.com/Bar";
}
}
Run Code Online (Sandbox Code Playgroud)
请注意我的课程要复杂得多,我必须测试的一些项目有副作用(例如写入数据库等).
如果我只有一个派生类(例如; Foo),那么我可以执行以下操作:
class FooMock extends Foo
{
protected function getUrl() {
return parent::getUrl() . "?sandbox";
}
}
class theTest extends PHPUnit_Framework_TestCase
{
public …Run Code Online (Sandbox Code Playgroud) javascript ×4
php ×4
phpunit ×3
unit-testing ×3
reactjs ×2
.htaccess ×1
api ×1
caching ×1
ecmascript-6 ×1
function ×1
github ×1
google-maps ×1
image ×1
lua ×1
markdown ×1
matomo ×1
mod-rewrite ×1
node.js ×1
npm ×1
rest ×1
return ×1
terminal ×1
warnings ×1
yarnpkg ×1