Vous devriez écrire une meilleure description, en disant ce que chaque partie du code fait référence à, comme:
# this is my controller_whatever.rb
def index
@article = Article.all.order('date DESC')
end
#this is my test/controllers/controller_whatever_test.rb
def setup
@article1 = articles(:one)
end
...
dans votre cas, vous n'avez pas créé un « tri », vous avez créé un controller
action
que les requêtes des enregistrements dans l'ordre décroissant, afin de le tester vous soit besoin d'un test de contrôleur ou d'un test d'intégration (je crois que les tests du contrôleur sont abandonnés au profit des tests d'intégration), qui sont plus complexes, car vous devez visiter le chemin du test, puis affirmer que vos résultats sont comme prévu .
Je pense que la meilleure façon de le faire est de créer réellement un scope
pour votre modèle, utilisez cela lors de l'interrogation dans index
et ensuite tester cette portée.
Ce serait quelque chose comme:
# app/models/article.rb
scope :default -> { order(date: :desc) }
Ce qui vous pouvez le tester avec:
#test/models/article_test.rb
def setup
@articles = Article.all
end
test "should be most recently published first" do
assert_equal articles(:last), @articles.first
assert_equal articles(:first), @articles.last
end
Et vous auriez besoin de deux appareils avec des dates différentes au moins, mais je vous conseille de avoir 4 ou 5 avec des dates différentes et écrites dans un ordre différent dans le fichier articles.yml (pour vous assurer que le test passe parce qu'il est correct et pas simplement à cause de l'aléatoire), et changer votre action index
simplement:
def index
@article = Article.all # since now you have a default_scope
end
(si vous avez d'autres endroits où vous interrogez les articles et vous avez besoin de les commander d'une autre manière, au lieu d'un default_scope, créez un particulier et l'utiliser, à la fois sur le contrôleur et le test du modèle)
Pouvez-vous être plus précis s'il vous plaît. –
Je veux écrire un test pour le tri des enregistrements –