对于我新启动的 Rails 6 应用程序,我想要一组自定义字体。我的设置如下所示:
# app/assets/stylesheets/my-font.sass
@font-face
font-family: 'my-font'
src: url('fonts/my-font.eot') format('embedded-opentype'), url('fonts/my-font.woff') format('woff'), url('fonts/my-font.ttf') format('truetype'), url('fonts/my-font.svg#my-font') format('svg')
font-weight: 400
font-style: normal
Run Code Online (Sandbox Code Playgroud)
然后在app/assets/stylesheets/fonts我的 sass 文件中引用了所有 4 个文件。
我application.sass有以下导入:@import 'my-font'.
当我运行时rails assets:precompile,它还会将所有 4 个带有后缀版本(例如my-font-7384658374658237465837246587263458.eot)的文件放在public目录中。
但是,当我运行该应用程序时,浏览器正在根目录中查找名为 的文件,该文件my-font.eot当然不存在并且是 404。这对我来说绝对是一个配置问题,但我不知道在哪里。任何帮助将非常感激。
我有一个基本控制器具有一些功能,基本控制器无法从外部访问,没有路由匹配它.
然后,我用其他控制器扩展该控制器以添加额外的功能和路由,我有3个控制器扩展该基本控制器只是为了在每个控制器上定义3个方法.
我想测试基本控制器,但我做不到
post :index
Run Code Online (Sandbox Code Playgroud)
因为没有该行动的路线(没有路线匹配错误)
我不想将这些测试添加到这3个控制器中的一个,因为它们发生了很大的变化(控制器在... 3周的运动中使用然后被删除).
一些代码......:
基本控制器,CampaignController
class CampaignController < ApplicationController
def index
#some code...
end
def campaign_name
raise('campaign_name missing')
end
def campaign_url
raise('campaign_url missing')
end
#more actions....
end
Run Code Online (Sandbox Code Playgroud)
其中一个可访问的控制器,SchoolCampaignController
class SchoolCampaignController < CampaignController
def campaign_name
'school'
end
def campaign_url
school_url
end
end
Run Code Online (Sandbox Code Playgroud)
那些控制器基本上是这样的,但有时我需要覆盖其中一个基本动作
那么,我做错了什么?我该如何正确测试CampaignController?
编辑:我不想测试那两个引发错误的方法,我想测试索引,或者其他一些操作(未显示)
我试过"response = controller.index",但是它没有调用before过滤器而且响应不是http响应,它只是该命令的输出(我不能做像...响应的期望.应该render_template(xxxx)
编辑2:为了绕过路由错误,我在before(:all)块中创建了测试内部的路由,然后路由不是问题,但现在,我得到有关非现有视图的错误(每个可访问控制器实现所有观点,但抽象的有非)
我有一个带有此验证的用户模型
validates :name, :lastname, :format => {:with => /^[a-zA-Z]+$/, :message => 'Only letters and spaces allowed.'}
Run Code Online (Sandbox Code Playgroud)
我不确定如何正确测试它。
我已经完成了一个函数,该函数返回由 a-zA-z 字符数组中的 10 个字符组成的随机字符串。
def get_random_name
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ".split('').shuffle[0..10].join
Run Code Online (Sandbox Code Playgroud)
结束 结束
然后我为每次运行的规格获得一个新名称。
我不想测试它是否使用了一些正则表达式,因为那样我将测试实现而不是行为,而且我也不想只测试一个硬编码案例。
我的问题是:我应该这样做吗?真的需要吗?它是更好还是无用?您知道测试这种验证的更好方法吗?
编辑:另一个问题,如何生成无效的随机名称?有没有办法创建包含至少一个超出允许值的字符的随机名称?我不能硬编码所有无效值的数组来随机化它,因为它太大了