记录下近期遇到的一些问题以及所犯的低级错误,考虑每个单独写一篇内容太少,索性一锅炖。
Rspec 针对model 的attribute进行 stub
一个简单的测试例子:
有model Payment, 含字段channel,string 类型。
it 'test' do
allow_any_instance_of(Payment).to receive(:channel).and_return 'wxpay'
a = Payment.new
expect(a.channel).to eql 'wxpay'
end
看着没什么问题,但是终端跑测试,报错:
Payment does not implement #channel
有两种解决方法:
- 将
allow_any_instance_of(Payment)
改为allow_any_instance_of(Payment.new.class)
【原因看这里Dynamic classes】 - 改用
instance_double('Payment', channel: 'wxpay')
, 替换掉allow_any_instance_of .....
修改测试代码【这里用instance_double】:
it 'test' do
instance_double('Payment', channel: 'wxpay')
# 或者 allow_any_instance_of(Payment.new.class).to receive(:channel).and_return 'wxpay'
a = Payment.new
expect(a.channel).to eql 'wxpay'
end
OK,passed.
PostgreSQL 中对array类型的attr查询
场景:
model product 中有一属性 categories,数据类型为array.
现有如下数据:
product1.categories = ['aa', 'bb']
product2.categories = ['cc']
product3.categories = ['dd', 'aa']
给定字符串S, 比如 ‘aa’,如何查询出Product中所有类别包含’aa’的记录? [肉眼看出,是product1,product3]
在product.rb
中的添加一个scope:
scope :categroy_cont, -> (categroy) { where("? = ANY(categories)", categroy)}
执行Product.all.category_cont('aa')
即可。
复制整个文件夹,丢失权限和links
之前复制了一个Rails项目,终端执行:
bin/yarn xxxx
报错,显示 permission denied: bin/yarn
终端执行:
ls -al bin
bin下面有yarn文件,但是文件属性中没有可执行的权限,, 执行:
chmod +x bin/*
解决了。
当时只知道copy 文件的时候,文件的权限遗失,但是不知道为什么会出现这种情况。
后面偶然发现了原因,手贱啊,原来是自己当时手动复制了整个文件夹,然后重命名了复制的那个文件夹,结果导致新项目中的link和可执行权限全部丢失了。
正确的复制方式,保留link 和权限:
cp -a fold1 fold2
这样复制后,得到的fold2下,所有的权限和link都不会丢失。
git 文件名大小写
记录下这个,纯粹是因为在大小写这个问题上踩的坑有些过分了。
直接使用命令:
git mv oldfileName newfileName
比如文件名为Hello.rb, 修改为hello.rb:
git mv Hello.rb hello.rb
或者稍微麻烦一点:
先将文件重命名为Hello1.rb,提交,commit,然后再重命名为hello.rb,再提交,最后将两个commit合并 rebase成一个commit。