2011-11-01 71 views
1

当写我scenerios,是有可能不必在步骤硬编码的文字?如何避免黄瓜功能的硬编码值?

好比说我在一个文本字段中插入一个用户名,并在密码字段中输入密码。

如果我需要做这在很多地方,这将是一个痛苦的修正。

例子:

Given I am the registered member "myusername" 
And I am on the login page 
When I fill in "email" with "[email protected]" 
And I fill in "password" with "123" 
And I press "Login" 
Then I should see "Account Activity" 

我不希望我的用户名,电子邮件和密码硬编码。

+0

请给我们展示真实的例子。 –

+0

@RyanBigg更新了一个例子。 – codecompleting

+1

这是不是对黄瓜的目的是写一个可测试的故事,甚至非技术人员非常可读的故事。如果我们开始混合变量,则可读性会略微偏离窗口。当然也可以使用Rspec和水豚和硒。 – Rasmus

回答

7

好了,你还在使用cucumber-rails宝石附带默认安装的训练车轮的旧版本。阅读这篇文章AslakHellesøy"The training wheels came off"

该帖子的要点是,使用web_steps.rb,虽然它已成为年“标准”现在是非常错误的,我们应该为此感到难过。

黄瓜的目的是用它做可读/理解为特色所有的人。

写这样的情况是漫长而无聊:

And I am on the login page 
When I fill in "email" with "[email protected]" 
And I fill in "password" with "123" 
And I press "Login" 
Then I should see "Account Activity" 

要真正地要测试的是,你应该能够登录,之后看到的东西做被记录在什么不管那是什么什么是不应该在场景写入。

因此理想情况下,你Scenario(更令人兴奋的时尚)是这样的:

When I login successfully 
Then I should see that I am logged in 

然后做跑腿的任务转移到一些新的台阶定义。这两个步骤不会自动为您定义,如web_steps.rb那样,而是需要将它们写入feature/step_definitions内的文件中。你所谓的文件是你的,但它会包含类似这样的内容:

When /I login successfully/ do 
    visit root_path 
    click_link "Login" 
    fill_in "Email", :with => "[email protected]" 
    fill_in "Password", :with => "password" 
end 

Then /^I should see I am logged in$/ do 
    page.should have_content("Account Activity") 
end 

没有更过分web_steps.rb文件和清洁的步骤定义。究竟是什么黄瓜应该是。

0

创建步骤封装在行为日志中描述here

如果这对你的作品,那么我会建议调整给定的/我/步骤豚我登录调用获得轻微提振业绩。另外,未来建议您避免使用web_steps,原因如下:here

0

瑞恩的例子是从命令式步骤到声明式的变化。这通常是一个更好的主意。这意味着该实现已被转移到步骤定义中,使得该功能更具可读性,并专注于行为而不是细节。

但是,如果你需要使用明确的步骤(必要),你可以尝试像

Given I am a registered member 
And I am on the login page 
When I fill in the login form 
And I submit the login form 
Then I should see I am logged in 

您还可以结合这些步骤,使其更简单。但是,Ryan的想法在大多数情况下可能会更好。

编辑:瑞恩写了一本书。这是相当不错。嗨,瑞恩!