我试图学习rspec并遇到问题,我试图在我的某个模型上测试唯一性验证,但即使我非常确定,测试也会失败它应该通过。
这是我的测试:
context "two products with the same title" do
Given{FactoryGirl.build(:product, title: "Hello test title")}
Given(:post2){FactoryGirl.build(:product, title: "Hello test title")}
Then{post2.invalid?}
end
这是我的验证器:
validates :title, uniqueness: true
然而,当我进行测试时,它返回失败,我不确定为什么?
任何帮助都会很棒!
答案 0 :(得分:2)
您需要在<t t-call="report.html_container">
<t t-foreach="docs" t-as="o">
<t t-call="report.external_layout">
<div class="page" >
<br></br><br></br>
<div class="row" style="border: 1px solid black">
<div class="col-md-12 text-center"><h2>JOURNAL DE PAIE</h2></div>
<div class="col-md-12 text-center"><p>Période du <span t-esc="data['form']['date_start']"/> au <span t-esc="data['form']['date_end']"/></p></div>
</div>
<br></br><br></br>
<div class="row">
<table class="table table-striped table-bordered table-condensed table-hover" >
<thead><!-- table head-->
<tr style="background-color: #BEC5C0;">
<th>Periode</th>
<th>Matricule</th>
<th>Employé</th>
<th>BASE</th>
<th>Primes</th>
<th>BRUT</th>
<th>CNSS</th>
<th>SAL IMPO</th>
<th>IRPP</th>
<th>Avance/pret</th>
<th>NET A PAYER</th>
</tr>
</thead>
<tbody>
<tr t-foreach="get_all_payslip_per_period(data['form']['date_start'],data['form']['date_end'])" t-as="p" >
<td style="text-align:center;" t-esc="get_month_name(p.date_from)"></td>
<td t-esc="p.employee_id.id"></td>
<td t-esc="p.employee_id.name"></td>
<t t-foreach="get_payslip_lines(p.line_ids)" t-as="l">
<t t-if="l.code=='BASE'">
<t t-set="base" t-value="l.total"/>
<td t-esc="base"></td>
</t>
</t>
<!-- primes -->
<td>
<div t-foreach="get_primes_values(p)" t-as="pr" >
<div style="text-align:left;background-color: #BEC5C0;" t-esc="pr['code']"></div>
<div style="text-align:right;background-color:#CDD8D0;" t-esc="pr['val']"></div>
</div>
</td>
<t t-foreach="get_payslip_lines(p.line_ids)" t-as="l">
<t t-if="l.code=='BRUT' ">
<t t-set="brut" t-value="l.total"/>
<td t-esc="brut"></td>
</t>
<t t-if="l.code=='CNSS' ">
<t t-set="cnss" t-value="l.total"/>
<td t-esc="cnss"></td>
</t>
<t t-if="l.code=='NET' ">
<t t-set="net" t-value="l.total"/>
<td t-esc="net"></td>
</t>
<t t-if="l.code=='IRPP' ">
<t t-set="irpp" t-value="l.total"/>
<td t-esc="irpp"></td>
</t>
</t>
<td t-esc="p.avance_amount"></td>
<td t-esc="get_total_by_rule_category(p, 'AUTRE')-get_total_by_rule_category(p, 'RCC')-(p.avance_amount)"></td>
</tr>
</tbody>
</table>
</div>
</div>
</t>
</t>
</t>
上添加唯一性验证:
</data>
而且你必须先title
validates :title, uniqueness: true
而不仅仅是create
product
这将创建一个build
对于具有相同context "two products with the same title" do
Given{FactoryGirl.create(:product, title: "Hello test title")}
Given(:post2){FactoryGirl.build(:product, title: "Hello test title")}
Then{post2.invalid?}
end
产品的第二个产品,将为title = "Hello test title"
答案 1 :(得分:0)
你应该使用像shoulda-matchers这样的宝石来测试这种测试:https://github.com/thoughtbot/shoulda-matchers 这会节省你很多时间,它会干你的测试(因为它们都是一样的)
关于你的测试,我不确定你想要实现什么。您没有验证那里的唯一性,只有产品的长度。要添加添加到产品型号的唯一性,请执行以下操作:
validates :title, uniqueness: true
在进行测试时,您应该创建(而不是构建)您的第一个产品。基本上,除非您的产品存储在数据库中,否则您的产品将是有效的,因为它不存在(还有)任何其他类似的产品。