Symfony Unit Test不会加载app_ globals

gre*_*ghz 4 unit-testing symfony1 symfony-1.4

我正在尝试在Symfony中为我的应用程序创建一个单元测试.

我的/config/app.yml看起来像这样:

all:
  tmp_dir: "tmp"

  # usps
  usps_username: xxxxx
  usps_password: xxxxx
  usps_dir: usps
Run Code Online (Sandbox Code Playgroud)

在单元测试中,当我运行类似于:

$t->comment(sfConfig::get('app_usps_username'));
Run Code Online (Sandbox Code Playgroud)

它只会输出和空行.这是怎么回事?如何从单元测试中从app.yml访问这些值?如果我尝试从其他地方访问值,它会按预期工作.

Jak*_*las 5

由于它是单元测试,因此配置未初始化.如果默认加载整个框架,那么它不会是一个单元测试.

如果您依赖配置选项而不是在测试中明确设置它们:

sfConfig::set('usps_username', 'my username');
Run Code Online (Sandbox Code Playgroud)

通过功能测试,它有点不同,因为整个应用程序正在被引导,您可以轻松访问您的配置.

编辑:

如果您查看缓存目录,您将看到所有配置都是在应用程序目录下生成的(cache/frontend/test/config/config_app.yml.php).如果你把它放在main config/app.yml中,那只是所有应用程序都继承了这些值.您仍然需要在应用程序的上下文中运行脚本才能使用它们.

换句话说:它应该是可能的,但你必须初始化适当的应用程序配置而不是项目配置(所以在你的引导程序中使用frontendConfiguration而不是ProjectConfiguration).

但是,我认为保持单元测试尽可能独立于应用程序是一个好习惯.