chai hiển thị phương thức use
để truy cập xuất khẩu chai
và đó là utils
.
Phương thức này có thể được bên thứ ba sử dụng khi creating plugins, nhưng cũng được sử dụng nội bộ để tải giao diện của nó.
Việc thực hiện phương pháp này rất đơn giản:
exports.use = function (fn) {
if (!~used.indexOf(fn)) {
fn(this, util);
used.push(fn);
}
return this;
};
Bên trong nó sử dụng này để nạp (trong số khác) chính Assertion prototype
và các chức năng cốt lõi khẳng định:
var assertion = require('./chai/assertion'); // primary Assertion prototype
exports.use(assertion); // load it
var core = require('./chai/core/assertions'); // core assertion functionality
exports.use(core); // load it
Một trong những phương pháp mà được hiển thị bởi Assertion prototype
là phương pháp addProperty
cho phép bạn thêm thuộc tính vào prototype
.
Nội bộ chai
sử dụng phương pháp này để thêm chức năng xác nhận chính vào Assertion prototype
. Ví dụ: tất cả các chuỗi ngôn ngữ và người trợ giúp khẳng định (exist
, empty
, v.v.) được thêm theo cách này.
chuỗi Ngôn Ngữ:
[ 'to', 'be', 'been'
, 'is', 'and', 'has', 'have'
, 'with', 'that', 'which', 'at'
, 'of', 'same' ].forEach(function (chain) {
Assertion.addProperty(chain, function() {
return this;
});
});
Tất cả các chức năng này có sẵn khi một giao diện cụ thể được nạp nội bộ, ví dụ expect
. Khi giao diện này được nạp, một mới Assertion prototype
sẽ được khởi tạo bất cứ khi nào expect
được thực hiện, trong đó sẽ chứa tất cả các chức năng:
// load expect interface
var expect = require('./chai/interface/expect'); // expect interface
exports.use(expect); // load it
// expect interface
module.exports = function (chai, util) {
chai.expect = function (val, message) {
return new chai.Assertion(val, message); // return new Assertion Object with all functionality
};
};
Như bạn có thể thấy phương pháp expect
chấp nhận một đối số val
(và một tùy chọn message
lập luận). Khi phương thức này được gọi (ví dụ expect(foo)
) một Assertion prototype
mới sẽ được khởi tạo và trả về, hiển thị tất cả chức năng cốt lõi (cho phép bạn thực hiện expect(foo).to.exist
).
Assertion Constructor
sử dụng flag
util
để đặt giá trị cờ trên đối tượng ánh xạ đến đối số được chuyển trong đối số val
.
function Assertion (obj, msg, stack) {
flag(this, 'ssfi', stack || arguments.callee);
flag(this, 'object', obj); // the 'object' flag maps to the passed in val
flag(this, 'message', msg);
}
Tất cả exist
sau đó không, là có được giá trị này thông qua các flag
util
và đánh giá nếu nó không tương đương với null
, bằng cách sử dụng phương pháp assert
xác định trên Assertion prototype
.
Assertion.addProperty('exist', function() {
this.assert(
null != flag(this, 'object')
, 'expected #{this} to exist'
, 'expected #{this} to not exist'
);
});
Đó là thuộc tính * getter *. – Bergi
Vâng, không được sử dụng để sử dụng chúng rất nhiều. –
Vâng, 'chai' bao trùm chúng. Và bạn đã không có một cái nhìn tại 'nên' ... – Bergi