【问题标题】:Symfony Unit Test Won't load app_ globalsSymfony 单元测试不会加载 app_globals
【发布时间】:2010-10-20 17:35:27
【问题描述】:

我正在尝试在 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 访问这些值?如果我尝试从其他地方访问这些值,它会按预期工作。

【问题讨论】:

    标签: unit-testing symfony1 symfony-1.4


    【解决方案1】:

    因为它是一个单元测试,所以配置没有被初始化。如果默认加载整个框架,这将不是真正的单元测试。

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

    sfConfig::set('usps_username', 'my username');
    

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

    编辑:

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

    换句话说:这应该是可能的,但您必须初始化适当的应用程序配置而不是项目配置(因此在引导程序中使用 frontendConfiguration 而不是 ProjectConfiguration)。

    但是,我认为让单元测试尽可能独立于应用程序是一种很好的做法。

    【讨论】:

    • 我检查了 bootstrap.php 文件并且(在此处继续记忆)它看起来像是在对 config 文件夹进行某事。有没有办法让它加载这些值?
    • 谢谢,我喜欢您使用缓存目录的解决方法,因为您可以找到所有 sfConfig::add() 命令,您可以将其复制到您的测试中。
    猜你喜欢
    • 1970-01-01
    • 2019-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-19
    • 1970-01-01
    • 1970-01-01
    • 2015-03-17
    相关资源
    最近更新 更多