#testing #bdd #expect #describe #syntax-error

nightly rustspec

BDD 风格测试库

15 个版本

使用旧 Rust 2015

0.1.16 2015 年 4 月 24 日
0.1.15 2015 年 4 月 12 日
0.1.11 2015 年 3 月 26 日
0.1.9 2015 年 2 月 26 日
0.1.3 2014 年 11 月 26 日

2012Rust 模式

每月 48 次下载

MIT 许可证

17KB
332

Rustspec 构建状态

为 Rust BDD 测试提供简洁的语法和错误(类似于 rspec 或 chai)。

我发现 Rust 内置的 assert! 的错误非常有限,我个人更喜欢这种语法,所以我决定将其作为学习练习开始。

使用方法

将其添加到您的 Cargo.toml 依赖项中,并运行 cargo build

[dependencies]
rustspec_assertions = "~0.1.4"
rustspec = "~0.1.3"

现在您应该可以通过加载 cargo 来使用这些断言进行测试

#![feature(plugin)]
#![plugin(rustspec, rustspec_assertions)]
#[macro_use] extern crate rustspec;
#[macro_use] extern crate rustspec_assertions;

use std::ops::Add;

#[derive(Debug)]
#[derive(Clone)]
#[derive(PartialEq)]
struct Point {
    x: isize,
    y: isize
}

impl Add for Point {
    type Output = Point;

    fn add(self, other: Point) -> Point {
        Point { x: self.x + other.x, y: self.y + other.y }
    }
}

scenario!("Point", {
    before({
        let one = 1is;
    });

    describe("#add", {
        before({
            let point_a = ::Point { x: one, y: one };
            let point_b = ::Point { x: 2is, y: 2is };
        });

        it("adds two points", {
            let point_c = point_a + point_b;
            expect(&point_c.x).to(eq!(3is));
            expect(&point_c.y).to(eq!(3is));
        });

        it.fails("adds two points and fails", {
            let point_c = point_a + point_b;
            expect(&point_c.x).to(eq!(4is));
            expect(&point_c.y).to(eq!(4is));
        });

        it.ignores("ignores this and something CAPITALIZED", {
            let point_c = point_a + point_b;
            expect(&point_c.x).to(eq!(4is));
            expect(&point_c.y).to(eq!(4is));
        });

        // There is a bug on rustc's hygien checking preventing this
	// from working for now, point_3 is not defined on the 'expect'
	// line because of it... essentially, it means you can use
	// variables defined on before blocks on the expect(), but not
	// on the eq!()
         // context("testing PartialEq", {
             // before({
             //     let point_3 = point_a + point_b;
             // });

             // it("passes with equals", {
             //     let point_c = point_a + point_b;
             //     expect(&point_c).to(eq!(point_3));
             // });
         // });
    });

    describe("a block without before", {
        it("works", {
            expect(&false).not_to(be_true!());
        });
    });
});

该软件包依赖于宏,因此您需要将其添加到 test.rs、lib.rs 或 main.rs 文件中

#![feature(plugin)]
#![plugin(rustspec, rustspec_assertions)]
#[macro_use] extern crate rustspec;
#[macro_use] extern crate rustspec_assertions;

有关匹配器和更多示例的完整列表,请查看 断言测试,有关语法示例,请查看 测试

错误

由于最新的 Rust 夜间构建和卫生检查存在一个问题,因此在使用 这个 PR 合并之后的 Rust 版本中,在匹配器(eq!、be_gt! 等)内部引用变量将不会工作(这就是为什么构建目前失败的原因)。我将尽快删除此说明,目前正在跟踪此问题 这里

协作

如果您想帮忙构建这个项目,请随时在此存储库或 断言存储库 上提交 PR,我将尽快查看。

正在进行中

请注意,这是一个正在进行中的项目,我是一个 Rust 新手,所以请期待错误。

待办事项

  • 找到一种方法来消除客户端对断言的依赖。
  • 改进失败的断言行报告(正在寻找实现此方法的方法,似乎与 1596216472 相关的问题)。
  • 添加之后

依赖项

~16KB