我过去曾尝试过 Behat 2.5,并且在设置时没有遇到任何问题,但现在我刚刚下载了 Behat 3,但在尝试设置时遇到了一些困难。
我的问题是,在全新安装后,如果我创建了一个 behat.yml 文件,我似乎无法定义 FeatureContext 文件的位置,也无法运行任何测试。
我的 composer.json 如下所示:
{
"require-dev": {
"behat/behat": "~3.0.4",
"sensiolabs/behat-page-object-extension": "2.0.*@dev"
},
"require": {
"behat/mink": "1.6.*",
"behat/mink-goutte-driver": "*",
"behat/mink-selenium2-driver": "*"
}
Run Code Online (Sandbox Code Playgroud)
}
我的项目文件夹的结构如下:
behat/
bootstrap/
FeatureContext.php
config/
behat.yml
features/
CheckHome.feature
vendor/
composer.json
composer.lock
Run Code Online (Sandbox Code Playgroud)
还有我的 behat.yml 文件:
default:
autoload:
'': %paths.base%/../bootstrap
suites:
default:
paths:
- %paths.base%/../features
contexts:
- FeatureContext
Run Code Online (Sandbox Code Playgroud)
当我尝试使用 CheckHome.feature 运行场景时
vendor/bin/behat
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
Behat\Behat\Context\Exception\ContextNotFoundException]
`FeatureContext` context class not found and can not be used.
Run Code Online (Sandbox Code Playgroud)
设置自动加载以便识别我的上下文的正确方法是什么?
谢谢
我正在建立一个英语和西班牙语的博客。我的目的是直接从基本 url: 访问西班牙语的默认内容:http://blog/
和来自http://blog/en
.
在分页时,我已经拥有了所有代码来循环浏览仅用英语或西班牙语编写的帖子,方法是检查locale
我在每个帖子前面设置的变量。虽然我的博客文章没有相同的文件名,但我在前面使用另一个名为ref
.
因此,对于西班牙语的帖子 A 和英语的帖子 B,我将有以下内容:
2018-01-01-post-A.md
---
locale: en
ref: my-ref
---
foo
Run Code Online (Sandbox Code Playgroud)
2019-01-04-post-B.md:
---
locale: es
ref: my-ref
---
bar
Run Code Online (Sandbox Code Playgroud)
我的问题是:我应该把我的英文帖子放在哪里,以便可以通过 访问它们http://blog/en/post-name/
?
这些帖子除了他们的语言之外已经有了他们的类别,所以把它们放在里面/en/_posts
是行不通的,因为当将永久链接指定_config.yml
为类似的东西permalink: /:categories/:year/:month/:title/
会使 url 看起来像http://blog/en/category-1/category-2/post-name
.
在每个英文帖子中定义固定链接也不是一种选择,因为我希望它们是从帖子数据(日期和标题)中生成的。
有什么我遗漏的东西可以让我根据需要/en/
用作 URL 的一部分吗?
菜单语言选择器和分页都可以工作,只显示所选语言的帖子。但是,当将鼠标悬停在英文帖子上时,虽然我将它们放在了里面_posts/en
,但子文件夹不会成为 url 的一部分。当我尝试相反的方法时也会发生同样的情况,在名为的项目根目录中创建一个新文件夹并在其中en
添加所有英文帖子,给我留下类似的东西en/_posts/
我有这个简单的数组,我想从较低的数字到更高的数字订购:
"80", "84", "115", "98", "128", "131", "132", "128", "139", "140", "141", "142", "142", "124", "144", "145", "148", "149", "152", "97"
Run Code Online (Sandbox Code Playgroud)
要对它进行排序,我会使用sort
,但输出不是我期望的输出.
这是我的代码:
def try_order
unordered = ["80", "84", "115", "98", "128", "131",
"132", "128", "139", "140", "141", "142",
"142", "124", "144", "145", "148", "149", "152", "97"]
p "Unordered list is #{unordered}."
ordered = unordered.sort
p "Ordered list is #{ordered}."
end
try_order
Run Code Online (Sandbox Code Playgroud)
输出如下:
"Unordered list is 80841159812813113212813914014114214212414414514814915297."
"Ordered list is 11512412812813113213914014114214214414514814915280849798."
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,有序列表不是以较低的数字(即80)开头,而是将3位数字首先从1开始.
有什么我想念的吗?
在同一次运行中执行多个测试时,我发现我得到的错误比我逐个执行测试的错误要多.当我研究这种行为时,我希望通过运行执行我想要的测试的rake任务来获得更准确的结果,但是在新的浏览器实例上运行每个测试,就像我逐个执行它们一样.通过这种方式,我可以获得与手动操作相同的结果,但避免了必须在终端上逐个启动它们的麻烦.
我在文档中搜索过这个功能但是找不到它,我在StackOverflow上发现的唯一类似的问题与selenium有关,而不是watir.
有可能做我正在寻找的事情吗?怎么样?
谢谢.