我有以下类和关系
City has_many Cinemas
Cinemas has_many Movies
Movies has_many Ratings
Movies Has_many Genres through GenreMovie
我想测试像
这样的查询* Show me the all movies in NewYork
* Show me the all movies in NewYork order by the rating
* Show me the all movies in NewYork order by length_of_movie, in genre "Action"
* show me all movies in Cinema "X" order by rating, that are in Genre "SciFi"
目前我的方式如下,使用工厂女孩,并将一堆模型链接在一起以检查数据,
city = create(:city)
cinema = create(:cinema, city: city)
5.times do
movie = create(:movie, cinema: cinema, tags: ["sci fi", "action"]
3.times do
create(:rating, score: 2.3, movie: movie)
end
end
并重复3-4以生成足够的数据来查询,但它似乎很笨重。
有更好的方法吗?
答案 0 :(得分:0)
我通常使用非常“简约”的方法对此进行测试:
e.g。对于你的第一个案例,我会制作两部电影,一部分在纽约,一部分在外面。你的方法应该只返回NY中的那个
第二部分,在纽约制作三部电影,评分不同。以非逻辑方式创建它们,这样无论如何,它们都将被排序。检查您的方法是否按正确顺序返回
与其他案件相似。
我不会只创建5x3电影。没有任何意义,只花费时间......
答案 1 :(得分:0)
您可以使用几种factory_girl构造来清理它们。 create_list
将创建一个对象数组,清理x.times do
块。 with_ratings
工厂的movie
特性可让您选择在创建电影时自动创建评级(通过FactoryGirl回调)。您甚至可以使用瞬态属性来控制数量和评级。所以你的结果看起来像这样:
cinema = create(:cinema)
movies = create_list(
:movie,
5,
:with_ratings,
cinema: cinema,
tags: [...],
ratings_count: 3,
ratings_value: 2.3
)
如果您需要访问该城市,可以通过cinema.city
。
请参阅: