Behat base_url问题或sqlite数据库

时间:2014-09-03 10:55:28

标签: php symfony behat mink

我在http://web.dev/web/app_behat.php访问我的页面,当我在浏览器中手动执行此操作时,它可以正常工作。

所以我设置了

base_url: "http://web.dev/web/app_behat.php/"

我没有匹配任何路线的路线但是如果我设置

base_url: "http://web.dev/app_behat.php/"

路由似乎匹配,但我错过了表错误,我已设置SymfonyDoctrineContext来处理模式创建。

全behat.yml:

default:
  formatter:
    name: progress
  context:
    class:  FootballRadar\Features\Context\FeatureContext
  extensions:
    Behat\Symfony2Extension\Extension:
      mink_driver: true
      kernel:
        env: test
        debug: true
    Behat\MinkExtension\Extension:
      base_url: "http://web.dev/app_behat.php/"
      default_session: symfony2
      show_cmd: 'open -a "Google Chrome" %s'

编辑:

我的config_behat.yml:

imports:
    - { resource: "config_dev.yml" }

assetic:
    debug:   true
    use_controller:
        enabled:  true
        profiler: false

framework:
    test: ~
    session:
        storage_id: session.storage.mock_file
    profiler:
        collect: false

web_profiler:
    toolbar: false
    intercept_redirects: false

swiftmailer:
    disable_delivery: true

doctrine:
  dbal:
    connections:
      default:
        driver:  pdo_sqlite
        user:    behat
        path:    %kernel.root_dir%/behat/default.db.cache
        charset: utf8
      model:
        driver:  pdo_sqlite
        user:    behat
        path:    %kernel.root_dir%/behat/model.db.cache
        charset: utf8

monolog:
  handlers:
    test:
      type: test

似乎所有人都误解了我的问题和/或完全忽略了我的第一句话。

我有一个正在运行的应用程序,我使用

访问它

http://web.dev/web/http://web.dev/web/app.php/)< - for prod

http://web.dev/web/app_dev.php/< - for dev

http://web.dev/web/app_behat.php/< - for behat

所有这些都像我在chrome或其他浏览器中手动使用它们一样工作

这就是为什么我很惊讶为什么http://web.dev/web/app_behat.php/给了我

No route found for "GET /web/app_behat.php/login"

http://web.dev/app_behat.php/给出了

SQLSTATE[HY000]: General error: 1 no such table: users_new

通过很少的调试,我确认SymfonyDoctrineContext确实读取了我的实体映射并发出查询来创建db模式,这两个db文件都具有读/写权限(为了测试我给了他们777)

我刚刚意识到的另一件事是,所有这些错误都会写入test.log文件而不是behat.log。我使用$kernel = new AppKernel('behat', true);

创建内核

也许我只是大大误解了应该如何工作?

EDIT2:

我注意到在为任一路径运行behat功能时没有为apache访问日志创建条目

我正在使用composer.json

版本

    "behat/behat": "2.5.*@dev",
    "behat/common-contexts": "1.2.*@dev",
    "behat/mink-extension":          "*",
    "behat/mink-browserkit-driver": "*",
    "behat/mink-selenium2-driver": "*",
    "behat/symfony2-extension":      "*",

1 个答案:

答案 0 :(得分:2)

您遇到的是两个无关的问题。

你没有获得

的路线这一事实
base_url: "http://web.dev/web/app_behat.php/"

非常明显:您的网络服务器将web/目录视为文档根目录,即如果您的网站/目录包含foo.html等文件,则{{1}将返回此文件。因此,第二条http://example.com/foo.html行是正确的。

(注意:与“简单”的Web应用程序不同,Symfony2隐藏了公共访问代码的主要部分,以防止直接执行库文件。只有base_url的内容是公开的。)

缺少的表问题与此无关。不幸的是,我们不知道确切的错误消息,但通常,您需要更新Doctrine架构以创建表。这可以通过运行以下命令之一来完成:

web/

第一个生成SQL命令,您可以自己将其复制/粘贴到SQL shell,后者将更新直接应用于数据库。