ruby-on-rails - ember-cli/rails capybara/rspec 测试

标签 ruby-on-rails ember.js rspec capybara

我正在尝试通过集成测试设置我的 ember-cli/rails 应用程序。在对 Ember 的内置测试库大惊小怪之后,我转而使用 RSpec(无论如何我都将其用于后端)和 Capybara。虽然我最终可以正确填写表格,但我对 sign_in 的发布请求总是失败。我认为问题是 Capybara 将请求发布到不同的数据库环境或其他东西!如果我在 Rails 控制台上查看,用户肯定在那里,并且无论如何我都会创建一个用户作为 RSpec 测试的一部分。

有人设法设置 Ember/Rails/Capybara/RSpec 吗?

这是我的规范:

describe "the signin process", :type => :feature, :js => true do
  it "signs me in" do
    visit '/'
    FactoryGirl.create :user, email: "user@example.com", password: 'password'
    within("#tufts-nav") do
      fill_in 'email', :with => 'test@test.com'
      fill_in 'password', :with => 'password'
    end
    click_button 'Sign In'
#   here authentication fails mysteriously
    expect(page).to have_content 'Jobs'
  end
end

最佳答案

简单/愚蠢的解决方案

在您的功能规范之前,让 RSpec 将 ember 构建到 rails 的 public/中。

# build ember, hijack rails public/ directory to host ember app
# this way no need to change settings or run any servers
# assumes rails API root path is not used (since ember now hosted from it)
RSpec.configure do |config|
  public_path = Rails.root.join('public')
  config.before(:context, type: :feature) do
    Dir.chdir 'frontend' do
      builder = spawn("ember build --environment=ci -output-path=#{public_path}")
      _pid, status = Process.wait2(builder)
      fail "non-zero exit status #{status}" unless status == 0
    end
  end

  config.after(:context, type: :feature) do
    `git clean -fd #{public_path}`
    `git checkout #{public_path}`
  end
end

配置

我们的 ember-cli 应用程序位于 rails-root/frontend,您可能需要更改名称或路径以指向您的

您可能想尝试环境部分,例如使用生产代替。我这样做是因为我的生产环境被硬编码为以我们在 heroku 上托管的 API 为目标,但我希望测试是独立的,即针对 rails 应用程序 capybara 主机运行。

清理需要 Git。如果你没有,你可以建立到另一条路径并使用 mv 换出 rails public/dir 然后再把它放回去。

您可能不希望使用全局安装的 ember-cli 来构建您的项目(出于版本控制原因)。如果您想在本地使用项目,请在 node_modules/ember-cli/bin/ember 中使用 spawn 命令,而不仅仅是 ember。

否则,ember-cli-rails

如果您将 ember 应用程序视为 Rails 应用程序的一个组件,并希望在 Rails 级别(rspec、capybara 等)编写测试,那么 ember-cli-rails可能是一个不错的选择。

这个 gem 负责构建 ember 应用程序,并从您在 rails 路由中安装它的 url 提供服务。

这对 capybara 是透明的:它向 ruby​​ 网络服务器发送请求并返回调用 css 和 js 的 html,就像 rails 通常所做的那样。

注意有一些 issues with assets来自 ember-cli 的 rails 现在以正确的路径提供服务,这让我转而快速部署一些东西。如果您将 rails Assets 管道用于 css、图像等,那么您应该没有问题。对我来说,它影响了 ember-cli 应用程序中的图像和网络字体。

除此之外,还需要一个用于 api 的服务器和一个用于 ember 前端的服务器(代理到 rails api),并且 capybara 需要告诉它连接到 ember 前端。 This Rakefilethis post似乎是一个开始。

关于ruby-on-rails - ember-cli/rails capybara/rspec 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28520980/

相关文章:

ruby - rspec 失败错误 : expected false to respond to `false?`

java - ActionCable(Rails5) 和安卓客户端

ruby-on-rails - 分解您的 RSpec 测试

ruby-on-rails - 在rails 3中的多列上分组+总和

ember.js - 如何使用 ember 数据处理服务器响应错误

javascript - 在 Ember.js 中返回函数错误

javascript - Ember.js - classNameBindings 正在删除从外部添加的类

ruby-on-rails - 当ignore_hidden_​​elements为true时无法填充Capybara中的任何隐藏元素

javascript - 同一 link_to 助手的不同行为 - 模板丢失

ruby-on-rails - Facebook 连接 + restful_authentication