Ruby на Rails: как проверить контроллер? - PullRequest
0 голосов
/ 29 января 2020

Я учусь Ruby. Сейчас я пытаюсь протестировать один из моих контроллеров.

Мой тестовый файл myapp / test / testing.rb , в то время как мой контроллер находится в myapp / app / controllers / test_controller.rb .

Содержимое testing.rb равно

data = testController.mymethod()
puts(data)

Но при выполнении

ruby myapp/test/testing.rb

в терминале , Я получаю предупреждение:

Traceback (последний вызов был последним): myapp / test / testing.rb: 6: in `': неинициализированная константа testController (NameError)

Может ли кто-нибудь объяснить мне, что я делаю неправильно и как я должен это делать?

Спасибо!

Ответы [ 2 ]

1 голос
/ 29 января 2020

В настоящее время принятый способ тестирования рельсовых контроллеров заключается в отправке http-запросов в ваше приложение и написании утверждений об ответе.

В Rails есть ActionDispatch::IntegrationTest, который предоставляет интеграционные тесты для Minitest, которые стандартная библиотека для тестирования Ruby Использование более старого подхода для макетирования всей платформы с помощью ActionDispatch::ControllerTest больше не рекомендуется для новых приложений.

Это ваш базовый c "Hello World" пример тестирования контроллера:

require 'test_helper'

class BlogFlowTest < ActionDispatch::IntegrationTest
  test "can see the welcome page" do
    get "/"
    assert_select "h1", "Welcome#index"
  end
end

Вы также можете использовать RSpe c, который представляет собой другую среду тестирования с большим количеством подписчиков. В RSpe c вы пишете спецификации запроса , которые являются просто тонкой оболочкой поверх ActionDispatch :: IntegrationTest.

1 голос
/ 29 января 2020

RSpe c - это DSL, написанный на Ruby специально для этой цели. Вы должны быть знакомы с ним, чтобы написать тесты своего кода. Что касается примечания группы RSpe c: `

Официальная рекомендация группы Rails и основной группы RSpe c состоит в том, чтобы вместо этого написать спецификации запросов. Спецификации запроса позволяют вам сосредоточиться на одном действии контроллера, но в отличие от тестов контроллера включают в себя маршрутизатор, стек промежуточного программного обеспечения, а также запросы и ответы стойки. Это добавляет реализма к тесту, который вы пишете, и помогает избежать многих проблем, которые часто встречаются в спецификациях контроллера. В Rails 5 спецификации запросов значительно быстрее, чем спецификации запросов или контроллеров в rails 4.

Таким образом, вы должны написать request спецификации для вашего контроллера. Примерно так: spec/controllers/users_controller_spec.rb

RSpec.describe "Test", type: :request do
  describe "request list of all tests" do
    user = User.create(email: 'test@user.com', name: 'Test User')
    get users_path
    expect(response).to be_successful
    expect(response.body).to include("Test User")
  end
end

Примерно так. Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...