使用SitePrism与Rspec和Capybara功能规格

时间:2013-04-05 20:39:02

标签: ruby rspec capybara site-prism

我最近通过rubyweekly电子邮件发现了SitePrism。 看起来很神奇。我可以看到它将成为未来。

我见过的例子主要是黄瓜步骤。 我试图找出如何使用SitePrism与rspec。

假设主页为@home_page,login_page为@login_page 我能理解

@home_page.load # => visit @home.expanded_url

然而,我不确定的部分是,如果我认为点击例如“登录”链接,并且Capybara中的浏览器进入登录页面 - 那么我如何访问登录页面的实例,没有加载它。

    @home_page = HomePage.new
    @home_page.load
    @home.login_link.click
    # Here I know the login page should be loaded, so I can perhaps do 

    @login_page = LoginPage.new
    @login_page.should be_displayed
    @login_page.email_field.set("some@email.com")
    @login_page.password_field.set("password")
    @login_page.submit_button.click

etc...

这似乎可能有用。所以,当你知道你应该在一个特定的页面上时,你创建了一个该页面的实例,并以某种方式创建了capybara“page”上下文,如page.find(“a [href ='/ sessions / new'] “)被转移到最后一个SitePrism对象?

我觉得我在这里错过了一些东西。 我会玩,看看我能弄清楚什么 - 只是想到我可能会遗漏一些东西。 我正在浏览消息来源,但如果有人想出来的话......随意分享:)

1 个答案:

答案 0 :(得分:4)

你所假设的是SitePrism的工作原理:)尽管你可能想要检查自述文件的结尾,它解释了如何避免在整个测试代码中实例化页面对象。这是一个例子:

# our pages

class Home < SitePrism::Page
  #...
end

class SearchResults < SitePrism::Page
  #...
end

# here's the app class that represents our entire site:

class App
  def home
    Home.new
  end

  def results_page
    SearchResults.new
  end
end

# and here's how to use it:

#first line of the test...
@app = App.new
@app.home.load
@app.home.search_field.set "sausages"
@app.home.search_button.click
@app.results_page.should be_displayed