短,我的问题的版本:设置测试数据单页web应用的全栈测试,其后端
在一个角单个页面的Web应用程序的书面黄瓜测试,我该怎么办完成通常在场景的“给定”部分执行的任务(例如设置测试数据,定义数据库记录关联以及在测试之间确保数据库之间的干净状态),测试整个堆栈时,前端应用程序和它的后端?应用程序源代码存储在两个独立的Git存储库中,一个用于前端应用程序,另一个用于后端。后端是使用Rails API gem以Ruby编写的。测试这个应用程序全栈的挑战来自这样一个事实,即它实际上是两个应用程序,与更传统的Ruby on Rails应用程序没有作为一个单独的页面应用程序实现相反。
我的问题的完整版:
我期待编写Web应用程序的一系列黄瓜测试。该应用程序由一个用Angular编写的前端单页应用程序和一个使用Rails API编写的后端API组成。前端的源代码和后端的源代码都存放在他们自己的Git仓库中,在两个代码库之间提供了一个干净的分隔。此外,该应用程序使用MySQL和Elasticsearch。
我以前在以前的Ruby on Rails项目中使用过Cucumber。这些项目不是作为单页面应用程序开发的。在这些项目中,很容易在Cucumber步骤定义中创建Ruby对象作为测试数据。例如,考虑从Rails项目,这不是一个单一的网页应用以下特点文件:
# features/home_page.feature
Feature: Home page
Scenario: Viewing application's home page
Given there's a post titled "My first" with "Hello, BDD world!" content
When I am on the homepage
Then I should see the "My first" post
在此功能文件的步骤可以通过以下几个步骤定义来实现:
# features/step_definitions/home_page_steps.rb
Given(/^there's a post titled "(.*?)" with "(.*?)" content$/) do |title, content|
@post = FactoryGirl.create(:post, title: title, content: content)
end
When(/^I am on the homepage$/) do
visit root_path
end
Then(/^I should see the "(.*?)" post$/) do |title|
@post = Post.find_by_title(title)
page.should have_content(@post.title)summary of the question
page.should have_content(@post.content)
end
在Ruby on Rails项目不是作为单页面应用程序开发的,测试工具可以作为Ruby宝石包含在项目中。对我来说,这些工具将包括:
group :test do
gem 'shoulda-matchers'
gem 'cucumber-rails', require: false
gem 'database_cleaner'
gem 'selenium-webdriver'
end
group :development, :test do
gem 'factory_girl_rails'
end
,你可以看到,这包括工厂女孩,用于建立Ruby对象的测试数据和定义数据库记录协会和数据库清理,用来保证一个干净的数据库状态在测试之间。包含Selenium WebDriver对于使用JavaScript的Cucumber场景是必需的。
我的单页应用程序的情况不同。如上所述,应用程序分为两个独立的代码库,一个用于Angular前端单页面应用程序,另一个用于Rails API后端界面。
但是,像我的项目这样的单页应用程序仍然具有与更传统的Rails应用程序没有构建为单页应用程序相同的测试需求。有必要测试应用程序全堆栈以确保每个组件(前端和后端)按预期一起工作。将需要定义黄瓜步骤,在测试之前创建“给定”前提条件,并且有必要确保测试之间有一个干净的数据库。
如何使用Cucumber测试这样的应用程序,其中包含两个代码库,作为单页应用程序实现?有一个用于JavaScript的Cucumber版本叫做CucumberJS。但是,我不知道如何创建灯具,记录关联,并确保使用CucumberJS进行测试之间的干净数据库。还有一个用于测试用Angular编写的称为量角器的JavaScript的工具。我想象这个工具代替了Selenium WebDriver。