我正在尝试通过集成测试设置我的 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 Rakefile和 this post似乎是一个开始。
关于ruby-on-rails - ember-cli/rails capybara/rspec 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28520980/