Как использовать аннотацию и микро в моде тестовой области? - PullRequest
0 голосов
/ 15 февраля 2020

Структура моего кода приведена ниже.

enter image description here

Я запустил 'car go run', и он работает. Но когда я запустил 'car go test', я получил ошибки, как показано ниже. Не могли бы вы сказать мне, почему и как я могу их исправить?

ошибка: не удается найти атрибут get в этой области

ошибка: не удается найти макрос routes в этой области

src / main.rs

#![feature(proc_macro_hygiene, decl_macro)]

#[macro_use]
extern crate rocket;

mod common;

fn main() {
    common::run();
}

src / common.rs

#[get("/hello")]
pub fn hello() -> &'static str {
    "hello"
}

pub fn run() {
    rocket::ignite().mount("/", routes![hello]).launch();
}

tests / development.rs

#![feature(proc_macro_hygiene, decl_macro)]

#[macro_use]
extern crate rocket;

#[cfg(test)]
mod common;

#[test]
fn test_development_config() {
    common::run();
}

tests / common.rs

use rocket::http::Status;
use rocket::local::Client;

#[get("/check_config")]
fn check_config() -> &'static str {
    "hello"
}

pub fn run() {
    let rocket = rocket::ignite().mount("/", routes![check_config]);

    let client = Client::new(rocket).unwrap();
    let response = client.get("/hello").dispatch();
    assert_eq!(response.status(), Status::Ok);
}

1 Ответ

1 голос
/ 15 февраля 2020

Каждый файл .rs в папке tests/ компилируется отдельно и выполняется как тест. Итак, development.rs скомпилировано, «включает» common.rs и работает. Но тогда common.rs компилируется индивидуально, и это завершается ошибкой, потому что #[macro_use] extern crate rocket; нигде нет

Одним из решений было бы поместить ваш common.rs в tests/common/mod.rs. Файлы в подкаталогах tests автоматически не компилируются как тестовые.

...