1

我的代码结构如下。

在此处输入图像描述

我运行了“货物运行”并且它有效。但是当我运行“货物测试”时,我得到了如下错误。你能告诉我为什么以及如何解决它们吗?

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();
}

测试/开发.rs

#![feature(proc_macro_hygiene, decl_macro)]

#[macro_use]
extern crate rocket;

#[cfg(test)]
mod common;

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

测试/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);
}
4

1 回答 1

2

文件夹中的每个.rs文件tests/都单独编译并作为测试执行。所以development.rs被编译,“包含”common.rs并且它有效。但是然后common.rs是单独编译的,它失败了,因为没有#[macro_use] extern crate rocket;任何地方。

一种解决方案是将您common.rs放入tests/common/mod.rs. 的子目录中的文件tests不会自动编译为测试。

于 2020-02-15T12:02:36.893 回答