- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是一名使用 EmberJS 的前端开发人员。这是一个很棒的前端框架,它吸收了 Rails 的许多优点:它非常复杂和自以为是,同时它非常敏捷且易于使用。
Ember 有自己的测试套件,完全可以进行验收测试。但它要么针对后端模拟进行测试,这很糟糕,原因有二:创建功能性后端模拟非常乏味,并且它不测试前端-后端集成。或者 Ember 可以针对正常运行的后端进行测试,这使得无法使用像 FactoryGirl/Fabrication 这样的夹具工厂,并且您必须在每次测试后手动重置测试数据库。
对此的传统解决方案是使用 Capybara。 Capybara 的问题在于 Ember 本质上是非常异步的。 Capybara 无法跟踪 Ember 是否已完成请求数据/计算响应属性/渲染 GUI 等。
有些人使用 Capybara 来测试 Ember,他们都使用最丑陋的技巧。这里有几个让你尝尝它的味道:
patiently do
return unless page.has_css? '.ember-application'
end
2000.times do #this means up to 20 seconds
return if page.evaluate_script "(typeof Ember === 'object') && !Ember.run.hasScheduledTimers() && !Ember.run.currentRunLoop"
sleep 0.01
end
def wait_for_ajax
counter = 0
while true
active = page.execute_script(“return $.active”).to_i
#puts “AJAX $.active result: “ + active.to_s
break if active < 1
counter += 1
sleep(0.1)
raise “AJAX request took longer than 5 seconds OR there was a JS error. Check your console.” if counter >= 50
end
end
所以我的想法是使用出色的 Ember 的 JS 测试套件从 Rails 执行测试。它将允许使用 Factory Girl 专门为每个测试设置数据库……并运行 NodeJS/Ember 测试而不是 Capybara。
我可以想象这样的事情:
describe "the signin process", :type => :feature do
before :each do
FactoryGirl.create(:user, :email => 'user@example.com', :password => 'password')
end
it "signs me in" do
test_in_ember(:module => 'Acceptance: User', :filter => 'signs me in')
end
it "logs me out" do
test_in_ember(:module => 'Acceptance: User', :filter => 'logs me out')
end
end
Ember 基于 Testem 有一个命令行测试界面,可以运行特定的测试。 .
或者,Ember 测试套件可以正常使用,但它会通过调用一个特殊的 API 来开始每个测试,请求加载特定的夹具工厂定义。
正式问题:我如何同时使用两个世界中最好的东西:来自 EmberJS 的原生测试套件和来自 Ruby on Rails 的原生夹具工厂?
最佳答案
在您的规范之前设置固定装置 - 并将它们传递给您的脚本。大多数 javascript 驱动程序允许您使用 page.execute_script ,它可用于传递序列化的固定装置。缺点:必须在测试执行开始之前完成。
设置工厂 API,允许您通过 ajax 调用工厂。最好在可安装的 Rails Engine 中。缺点:慢,异步
def FactoriesController
# get /spec/factories/:factory/new
def new
@factory = FactoryGirl.new(params[:factory_uid])
respond_to do |f|
render json: @factory
end
end
# post /spec/factories/:factory
def create
FactoryGirl.create(params[:factory_uid], factory_params)
end
# ...
end
一个蹩脚的示例工厂客户端:
var FactoryBoy = {
build: function(factory, cb){
$.ajax('/factories/' + factory + '/new' , dataType: 'json').done(function(data){ cb(data) });
},
create: function(factory, cb){
$.ajax('/factories/' + factory , dataType: 'json' method:'POST').done(function(data){ cb(data) });
}
}
测试示例:
module('Unit: SomeThing');
test('Nuking a user', function() {
var done = assert.async();
FactoryBoy.create('user', function(user){
this.store.find('user', user.id).then(function(u){
$('#nuke_user').click();
ok(u.get('isDeleted'));
done();
});
});
});
关于ruby-on-rails - 从带有夹具工厂的 Rails 环境运行 JS 测试套件,或用于前端的 API 以请求在后端加载某些夹具,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30308416/
是否可以设置一个夹具来创建数据库 View 而不是 CakePHP 中的数据库表?在创建表的夹具和另一个应该是数据库 View 的夹具中使用相同的数据似乎效率低下。 最佳答案 我设法这样做,其中 vi
与这个锦标赛赛程算法作斗争。 代码运行良好,但我需要帮助将数据插入 mysql我似乎无法访问 $varables.. 非常感谢 php 专家的任何调整 ... $teamnames = "Arsena
我正在尝试开始使用 Symfony2,并一直在尝试为我的应用程序的模型层设置自动化测试。 Symfony2 书讨论了 Controller 的单元测试,但我找不到很多模型测试的示例。 我希望在每次测试
我想为我的测试使用一个通用的夹具: @RunWith(JUnitPlatform::class) abstract class BaseSpek: Spek({ beforeGroup {pr
使用这个固定装置,我想根据 before 固定装置 Hook 中 API 调用的结果设置 checkoutId,这样我就可以用它来设置页面我的测试 let checkoutId; fixture`Ch
我尝试过各种尝试。这是我最新的。我只是想 stub Axios 请求并返回固定装置。 const { expect } = require('chai'); const sinon = require
我是一名优秀的程序员,十分优秀!