我正在尝试在Symfony中为我的应用程序创建一个单元测试。
我的/config/app.yml看起来像这样:
all:
tmp_dir: "tmp"
# usps
usps_username: xxxxx
usps_password: xxxxx
usps_dir: usps
在单元测试中,当我运行类似的东西时:
$t->comment(sfConfig::get('app_usps_username'));
它只会输出并清空。这是怎么回事?如何从单元测试中从app.yml访问这些值?如果我尝试从其他地方访问这些值,它会按预期工作。
答案 0 :(得分:5)
由于它是单元测试,因此未初始化配置。如果默认加载整个框架,它就不是真正的单元测试。
如果您依赖配置选项而不是在测试中明确设置它们:
sfConfig::set('usps_username', 'my username');
通过功能测试,它有点不同,因为整个应用程序正在被引导,您可以轻松访问您的配置。
编辑:
如果您查看缓存目录,您会看到所有配置都是在应用程序目录下生成的(cache / frontend / test / config / config_app.yml.php)。如果你把它放在main config / app.yml中,那只是所有应用程序都继承了这些值。您仍然需要在应用程序的上下文中运行脚本才能使用它们。
换句话说:它应该是可能的,但你必须初始化适当的应用程序配置而不是项目配置(所以在你的引导程序中使用frontendConfiguration而不是ProjectConfiguration)。
但是,我认为保持单元测试尽可能独立于应用程序是一个好习惯。