黄瓜测试以奇怪的方式作用 [英] Cucumber Test acting in a strange way
问题描述
首先它基于Rails 3的行动,所以,我会输入每一个我已经尝试过的错误,我有任何人都可以帮助我,如果有任何重要的文件,我应该添加到我的问题,请告诉...也许这个问题的标题不够好,但我不知道什么标题应该给黄瓜的问题。
First its based on Rails 3 on Action so, i will type every thing i have tried and the errors I have got so anybody can help me and if there any important file i should added to my question please tell...also maybe the title of the question not good enough but i don't know what title should i give to cucumber questions.
在这本书中,作者试图隐藏编辑和删除链接,所以未签名的用户和登录用户将无法看到它,除非他们是管理员。
In the book the author was trying to hide edit and delete links so non-signed user and signed in user won't be able to see it except they are admins.
验证他使用devise 1.4.3和黄瓜版本1.0.6,我在第7章专门在7.3.3。
for authentication he is using devise 1.4.3 and cucumber version 1.0.6, i am on chapter 7 specifically on 7.3.3.
现在书中的步骤说,我们将wirte黄瓜测试隐藏编辑和删除链接这是它的代码:hidden_links.feature
Now the steps in the book said we will wirte a cucumber test for hiding edit and delete links and that was the code of it: hidden_links.feature
Scenario: Edit project link is hidden for non-signed-in users
Given I am on the homepage
When I follow "TextMate 2"
Then I should not see the "Edit Project" link
Scenario: Edit project link is hidden for signed-in user
Given I am signed in as "user@ticketee.com"
When I follow "TextMate 2"
Then I should not see the "Edit Project" link
Scenario: Edit project link is shown to admin
Given I am signed in as "admin@ticketee.com"
When I follow "TextMate 2"
Then I should see the "Edit Proeject" link
Scenario: Delete project link is hidden for non-signed-in users
Given I am on the homepage
When I follow "TextMate 2"
Then I should not see the "Delete Project" link
Scenario: Delete project link is hidden for signed-in users
Given I am signed in as "user@ticketee.com"
When I follow "TextMate 2"
Then I should not see the "Delete Project" link
Scenario: Delete project link is shown to admins
Given I am signed in as "admin@ticketee.com"
When I follow "TextMate 2"
Then I should see the "Delete Project" link
那么当试图运行测试时,我有一个关于缺少功能的问题(虽然在书中的测试是通过,然后应该推送到github,但对我来说没有通过)所以我添加了这在我的代码的顶部:
then when tried to run the test i got a problem about missing feature (although in the book the test is passing and then should be pushed to github but for me it not passing ) so i have added this at the top of my code:
Feature: Hidden Links
In order to clean up the user experience
As the system
I want to hide links from users who can't act on them
现在,当我试图运行测试,我得到这个错误:
Now when i am trying to run the test i am getting this error:
➜ ticketee git:(master) ✗ bin/cucumber features/hidden_links.feature
Rack::File headers parameter replaces cache_control after Rack 1.5.
Using the default profile...
Feature: Hidden Links
In order to clean up the user experience
As the system
I want to hide links from users who can't act on them
Scenario: Edit project link is hidden for non-signed-in users # features/hidden_links.feature:6
Given I am on the homepage # features/step_definitions/web_steps.rb:44
When I follow "TextMate 2" # features/step_definitions/web_steps.rb:56
Unable to find link "TextMate 2" (Capybara::ElementNotFound)
./features/step_definitions/web_steps.rb:57:in `/^(?:|I )follow "([^"]*)"$/'
features/hidden_links.feature:8:in `When I follow "TextMate 2"'
Then I should not see the "Edit Project" link # features/hidden_links.feature:9
Undefined step: "I should not see the "Edit Project" link" (Cucumber::Undefined)
features/hidden_links.feature:9:in `Then I should not see the "Edit Project" link'
Scenario: Edit project link is hidden for signed-in user # features/hidden_links.feature:11
Given I am signed in as "user@ticketee.com" # features/hidden_links.feature:12
Undefined step: "I am signed in as "user@ticketee.com"" (Cucumber::Undefined)
features/hidden_links.feature:12:in `Given I am signed in as "user@ticketee.com"'
When I follow "TextMate 2" # features/step_definitions/web_steps.rb:56
Then I should not see the "Edit Project" link # features/hidden_links.feature:14
Undefined step: "I should not see the "Edit Project" link" (Cucumber::Undefined)
features/hidden_links.feature:14:in `Then I should not see the "Edit Project" link'
Scenario: Edit project link is shown to admin # features/hidden_links.feature:16
Given I am signed in as "admin@ticketee.com" # features/hidden_links.feature:17
Undefined step: "I am signed in as "admin@ticketee.com"" (Cucumber::Undefined)
features/hidden_links.feature:17:in `Given I am signed in as "admin@ticketee.com"'
When I follow "TextMate 2" # features/step_definitions/web_steps.rb:56
Then I should see the "Edit Proeject" link # features/hidden_links.feature:19
Undefined step: "I should see the "Edit Proeject" link" (Cucumber::Undefined)
features/hidden_links.feature:19:in `Then I should see the "Edit Proeject" link'
Scenario: Delete project link is hidden for non-signed-in users # features/hidden_links.feature:21
Given I am on the homepage # features/step_definitions/web_steps.rb:44
When I follow "TextMate 2" # features/step_definitions/web_steps.rb:56
Unable to find link "TextMate 2" (Capybara::ElementNotFound)
./features/step_definitions/web_steps.rb:57:in `/^(?:|I )follow "([^"]*)"$/'
features/hidden_links.feature:23:in `When I follow "TextMate 2"'
Then I should not see the "Delete Project" link # features/hidden_links.feature:24
Undefined step: "I should not see the "Delete Project" link" (Cucumber::Undefined)
features/hidden_links.feature:24:in `Then I should not see the "Delete Project" link'
Scenario: Delete project link is hidden for signed-in users # features/hidden_links.feature:26
Given I am signed in as "user@ticketee.com" # features/hidden_links.feature:27
Undefined step: "I am signed in as "user@ticketee.com"" (Cucumber::Undefined)
features/hidden_links.feature:27:in `Given I am signed in as "user@ticketee.com"'
When I follow "TextMate 2" # features/step_definitions/web_steps.rb:56
Then I should not see the "Delete Project" link # features/hidden_links.feature:29
Undefined step: "I should not see the "Delete Project" link" (Cucumber::Undefined)
features/hidden_links.feature:29:in `Then I should not see the "Delete Project" link'
Scenario: Delete project link is shown to admins # features/hidden_links.feature:31
Given I am signed in as "admin@ticketee.com" # features/hidden_links.feature:32
Undefined step: "I am signed in as "admin@ticketee.com"" (Cucumber::Undefined)
features/hidden_links.feature:32:in `Given I am signed in as "admin@ticketee.com"'
When I follow "TextMate 2" # features/step_definitions/web_steps.rb:56
Then I should see the "Delete Project" link # features/hidden_links.feature:34
Undefined step: "I should see the "Delete Project" link" (Cucumber::Undefined)
features/hidden_links.feature:34:in `Then I should see the "Delete Project" link'
Failing Scenarios:
cucumber features/hidden_links.feature:6 # Scenario: Edit project link is hidden for non-signed-in users
cucumber features/hidden_links.feature:21 # Scenario: Delete project link is hidden for non-signed-in users
6 scenarios (2 failed, 4 undefined)
18 steps (2 failed, 4 skipped, 10 undefined, 2 passed)
0m0.187s
You can implement step definitions for undefined steps with these snippets:
Then(/^I should not see the "(.*?)" link$/) do |arg1|
pending # express the regexp above with the code you wish you had
end
Given(/^I am signed in as "(.*?)"$/) do |arg1|
pending # express the regexp above with the code you wish you had
end
Then(/^I should see the "(.*?)" link$/) do |arg1|
pending # express the regexp above with the code you wish you had
end
然后我添加到我的代码,以试图让我的测试通过:
Then I added this to my code in order to trying to make my test pass:
Background:
Given there are the following users:
| email | password | admin |
| user@ticketee.com | password | false |
| admin@ticketee.com | password | true |
And there is a project called "TextMate 2"
然后我运行测试,这个错误:
Then I run the test and got this error:
➜ ticketee git:(master) ✗ bin/cucumber features/hidden_links.feature
Rack::File headers parameter replaces cache_control after Rack 1.5.
Using the default profile...
Feature: Hidden Links
In order to clean up the user experience
As the system
I want to hide links from users who can't act on them
Background: # features/hidden_links.feature:6
Given there are the following users: # features/step_definitions/user_steps.rb:1
| email | password | admin |
| user@ticketee.com | password | false |
| admin@ticketee.com | password | true |
And there is a project called "TextMate 2" # features/step_definitions/project_steps.rb:1
Scenario: Edit project link is hidden for non-signed-in users # features/hidden_links.feature:13
Given I am on the homepage # features/step_definitions/web_steps.rb:44
When I follow "TextMate 2" # features/step_definitions/web_steps.rb:56
undefined method `admins_only' for #<#<Class:0x9c16994>:0x9d134b4> (ActionView::Template::Error)
./app/views/projects/show.html.erb:3:in `_app_views_projects_show_html_erb___713092924_82350660'
./features/step_definitions/web_steps.rb:57:in `/^(?:|I )follow "([^"]*)"$/'
features/hidden_links.feature:15:in `When I follow "TextMate 2"'
Then I should not see the "Edit Project" link # features/hidden_links.feature:16
Undefined step: "I should not see the "Edit Project" link" (Cucumber::Undefined)
features/hidden_links.feature:16:in `Then I should not see the "Edit Project" link'
Scenario: Edit project link is hidden for signed-in user # features/hidden_links.feature:18
Given I am signed in as "user@ticketee.com" # features/hidden_links.feature:19
Undefined step: "I am signed in as "user@ticketee.com"" (Cucumber::Undefined)
features/hidden_links.feature:19:in `Given I am signed in as "user@ticketee.com"'
When I follow "TextMate 2" # features/step_definitions/web_steps.rb:56
Then I should not see the "Edit Project" link # features/hidden_links.feature:21
Undefined step: "I should not see the "Edit Project" link" (Cucumber::Undefined)
features/hidden_links.feature:21:in `Then I should not see the "Edit Project" link'
Scenario: Edit project link is shown to admin # features/hidden_links.feature:23
Given I am signed in as "admin@ticketee.com" # features/hidden_links.feature:24
Undefined step: "I am signed in as "admin@ticketee.com"" (Cucumber::Undefined)
features/hidden_links.feature:24:in `Given I am signed in as "admin@ticketee.com"'
When I follow "TextMate 2" # features/step_definitions/web_steps.rb:56
Then I should see the "Edit Proeject" link # features/hidden_links.feature:26
Undefined step: "I should see the "Edit Proeject" link" (Cucumber::Undefined)
features/hidden_links.feature:26:in `Then I should see the "Edit Proeject" link'
Scenario: Delete project link is hidden for non-signed-in users # features/hidden_links.feature:28
Given I am on the homepage # features/step_definitions/web_steps.rb:44
When I follow "TextMate 2" # features/step_definitions/web_steps.rb:56
undefined method `admins_only' for #<#<Class:0x9c16994>:0xaa71660> (ActionView::Template::Error)
./app/views/projects/show.html.erb:3:in `_app_views_projects_show_html_erb___713092924_82350660'
/home/dexter/.rvm/gems/ruby-1.9.3-p194/gems/actionpack-3.2.12/lib/action_view/template.rb:145:in `block in render'
./features/step_definitions/web_steps.rb:57:in `/^(?:|I )follow "([^"]*)"$/'
features/hidden_links.feature:30:in `When I follow "TextMate 2"'
Then I should not see the "Delete Project" link # features/hidden_links.feature:31
Undefined step: "I should not see the "Delete Project" link" (Cucumber::Undefined)
features/hidden_links.feature:31:in `Then I should not see the "Delete Project" link'
Scenario: Delete project link is hidden for signed-in users # features/hidden_links.feature:33
Given I am signed in as "user@ticketee.com" # features/hidden_links.feature:34
Undefined step: "I am signed in as "user@ticketee.com"" (Cucumber::Undefined)
features/hidden_links.feature:34:in `Given I am signed in as "user@ticketee.com"'
When I follow "TextMate 2" # features/step_definitions/web_steps.rb:56
Then I should not see the "Delete Project" link # features/hidden_links.feature:36
Undefined step: "I should not see the "Delete Project" link" (Cucumber::Undefined)
features/hidden_links.feature:36:in `Then I should not see the "Delete Project" link'
Scenario: Delete project link is shown to admins # features/hidden_links.feature:38
Given I am signed in as "admin@ticketee.com" # features/hidden_links.feature:39
Undefined step: "I am signed in as "admin@ticketee.com"" (Cucumber::Undefined)
features/hidden_links.feature:39:in `Given I am signed in as "admin@ticketee.com"'
When I follow "TextMate 2" # features/step_definitions/web_steps.rb:56
Then I should see the "Delete Project" link # features/hidden_links.feature:41
Undefined step: "I should see the "Delete Project" link" (Cucumber::Undefined)
features/hidden_links.feature:41:in `Then I should see the "Delete Project" link'
Failing Scenarios:
cucumber features/hidden_links.feature:13 # Scenario: Edit project link is hidden for non-signed-in users
cucumber features/hidden_links.feature:28 # Scenario: Delete project link is hidden for non-signed-in users
6 scenarios (2 failed, 4 undefined)
30 steps (2 failed, 4 skipped, 10 undefined, 14 passed)
0m0.748s
You can implement step definitions for undefined steps with these snippets:
Then(/^I should not see the "(.*?)" link$/) do |arg1|
pending # express the regexp above with the code you wish you had
end
Given(/^I am signed in as "(.*?)"$/) do |arg1|
pending # express the regexp above with the code you wish you had
end
Then(/^I should see the "(.*?)" link$/) do |arg1|
pending # express the regexp above with the code you wish you had
end
这是show.html.erb其中我有admins_only:
and that is the show.html.erb where i have admins_only:
<% title(@project.name, "Projects") %>
<h2><%= @project.name %></h2>
<% admins_only do %>
<%= link_to "Edit Project", edit_project_path(@project) %>
<%= link_to "Delete Project", @project, :method => :delete, :confirm => "Are you sure you want to delete this project?" %>
<% end %>
<%= link_to "New Ticket", new_project_ticket_path(@project) %>
<ul id= 'tickets'>
<% @project.tickets.each do |ticket| %>
<li>
#<%= ticket.id %> - <%= link_to ticket.title, [@project, ticket] %>
</li>
<% end %>
</ul>
这是我试过,但未能解决我的问题,所以帮助赞赏...
thats what i have tried but failed to solve my problem so help appreciated...
推荐答案
您尚未在相应的_steps.rb文件中实现步骤定义。
You have not implemented the step definitions in a corresponding _steps.rb file. Web Steps provides some generic step definitions, but they are terrible and you shouldn't use them.
为了解决这个问题,你需要粘贴这个:
To solve this you need to paste this:
Then(/^I should not see the "(.*?)" link$/) do |arg1|
pending # express the regexp above with the code you wish you had
end
Given(/^I am signed in as "(.*?)"$/) do |arg1|
pending # express the regexp above with the code you wish you had
end
Then(/^I should see the "(.*?)" link$/) do |arg1|
pending # express the regexp above with the code you wish you had
end
放入step_definitions目录中的ruby文件,并用代码替换pending以满足该步骤的条件。
into a ruby file inside the step_definitions directory, and replace pending with the code to fulfill the conditions of the step.
这篇关于黄瓜测试以奇怪的方式作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!