处理重复模型创建

时间:2018-05-03 19:33:09

标签: ruby-on-rails ruby rspec

我在Rails中使用Rspec。我目前正在测试我的一个型号。此特定模型以5条记录的形式播种到数据库中。每条记录都有一个带有种子值的name属性。例如:

<script>
function showProducts(minQ, maxQ) {
$("#products li").filter(function() {
var quality = parseInt($(this).data("quality"), 10);
if(quality >= minQ && quality <= maxQ){
$(this).removeClass('slider1Hide');
} else {
$(this).addClass('slider1Hide');
}
});
}


$(function() {
var options = {
range: true,
min: 1,
max: 36,
step: 1,
values: [3, 24],
slide: function( event, ui ) {
$( "#amount2" ).val(  ui.values[ 0 ] + " - " + ui.values[ 1 ] );
},
change: function(event, ui) {
var minQ = $("#quality").slider("values", 0);
var maxQ = $("#quality").slider("values", 1);
showProducts(minQ, maxQ);
}

};

$("#quality").slider(options);
$( "#amount2" ).val( $( "#quality" ).slider( "values", 0 ) +
" - " + $( "#quality" ).slider( "values", 1 ) );
});


</script>

<script>
function showProducts(minP, maxP) {
$("#products li").filter(function() {
var price = parseInt($(this).data("price"), 10);
if(price >= minP && price <= maxP){
$(this).removeClass('slider1Hide');
} else {
$(this).addClass('slider1Hide');
}
});
}


$(function() {
var options = {
range: true,
min: 0,
max: 250,
step: 1,
values: [100, 200],
slide: function( event, ui ) {
$( "#amount" ).val(ui.values[ 0 ] + " zł - " + ui.values[ 1 ] + " zł" );
},
change: function(event, ui) {
var minP = $("#price").slider("values", 0);
var maxP = $("#price").slider("values", 1);
showProducts(minP, maxP);
}

};

$("#price").slider(options);
$( "#amount" ).val( $( "#price" ).slider( "values", 0 ) +
" zł - " + $( "#price" ).slider( "values", 1 ) + " zł" );
});


</script>

我想在Rspec中测试每一个的创建。目前我这样做:

  def self.seed
    find_or_create_by(name: 'Text')
    find_or_create_by(name: 'Number')
    find_or_create_by(name: 'Date')
    find_or_create_by(name: 'Time')
    find_or_create_by(name: 'Boolean')
  end

这是测试此行为的正确方法吗?或者有更有效的方法吗?

1 个答案:

答案 0 :(得分:2)

这里的系统测试似乎是方法.seed;所以,也许是这样的:

describe FieldType do
  describe '.seed' do
    before do
      described_class.seed
    end

    it 'creates the expected records' do
      expect(described_class.pluck(:name)).to match_array(['Text', 'Number', 'Date', 'Time', 'Boolean'])
    end
  end
end

另外,请检查Better Specs以获取一些建议,并rubocop-rspec根据某些RSpec最佳做法自动检查您的代码。