我想在我的网站上添加亵渎性检查。
我采用的是TD方法,我正在尝试以下方法:
到目前为止,这是我的规范:
describe Painter do
before do
@painter = FactoryGirl.create(:painter_flag)
end
context "blacklist flag" do
it "check if profanity exists" do
@painter.experience = "test"
@painter.save
expect {@painter.blacklist_flags?}.to be_true
end
it "create flag if profanity exists" do
@painter.experience = "test"
@painter.save
BlacklistFlag.count.should be > 0
end
end
end
与画家相关的代码:
after_save :create_flag, if: :blacklist_flags?
def blacklist_flags?
list = ""
list << skills
#list << experience
#list << first_name
#list << last_name
#list.downcase.scan(/(badword|badword)/).size > 0
end
def create_flag
end
如果我在两个测试通过上方注释掉以下代码:
list << skills
当我离开代码时,我收到以下错误:
2)如果亵渎存在,画家黑名单标志会创建标志 失败/错误:@painter = FactoryGirl.create(:painter_flag) 类型错误: 无法将nil转换为字符串
似乎引用自我存在问题,因为技能,经验等是模型的一部分。我不知道如何解决这个问题。请指教。
更新
FactoryGirl.define do
factory :painter do
first_name "Brian"
last_name "Rosedale"
state "OH"
zip_code "43081"
sequence(:email) {|n| "nobody#{n}@painterprofessions.com" }
phone "12345566"
pdca_member false
password "123456"
factory :painter_flag do
skills = "badword"
end
end
end
答案 0 :(得分:0)
我认为造成错误的原因是因为回调已在@painter = FactoryGirl.create(:painter_flag)
行执行。
如果要测试回调,可能需要使用FactoryGirl.build
方法。
答案 1 :(得分:0)
只需在工厂中使用此行:painter_flag
,而不使用=
符号。
skills "badword"