Mocha에서 describe ()의 역할은 무엇입니까?
공식 Mocha 사이트 의 문서 에는 다음 예가 포함되어 있습니다.
describe('User', function(){
describe('#save()', function(){
it('should save without error', function(done){
var user = new User('Luna');
user.save(function(err){
if (err) throw err;
done();
});
})
})
})
describe
함수에 내 테스트를 중첩해야하는시기 와 기본 목적이 무엇인지 알고 싶습니다 describe
. describe
프로그래밍 언어의 주석에 전달 된 첫 번째 인수를 비교할 수 있습니까 ? describe
콘솔의 출력 에는 아무것도 표시되지 않습니다 . 가독성 목적으로 만 사용됩니까, 아니면이 기능에 다른 용도가 있습니까?
이렇게 사용하면 문제가 있나요?
describe('User', function(){
describe('#save()', function(){
var user = new User('Luna');
user.save(function(err){
if (err) throw err;
done();
})
})
})
이렇게하면 테스트는 통과합니다.
it
호출은 각각의 개별 테스트를 식별하지만 자체적으로 it
테스트 스위트가되는 방법에 대한 모카 아무것도 말하지 않는 구조를 . describe
호출 을 사용하는 방법 은 테스트 스위트에 구조를 제공합니다. 다음은 describe
테스트 스위트를 구조화 하는 데 사용 하는 몇 가지 작업입니다 . 다음은 논의를 위해 단순화 된 테스트 스위트의 예입니다.
function Foo() {
}
describe("Foo", function () {
var foo;
beforeEach(function () {
foo = new Foo();
});
describe("#clone", function () {
beforeEach(function () {
// Some other hook
});
it("clones the object", function () {
});
});
describe("#equals", function () {
it("returns true when the object passed is the same", function () {
});
it("returns false, when...", function () {
});
});
afterEach(function () {
// Destroy the foo that was created.
// foo.destroy();
});
});
function Bar() {
}
describe("Bar", function () {
describe("#clone", function () {
it("clones the object", function () {
});
});
});
그 상상 Foo
하고 Bar
본격적인 클래스입니다. Foo
has clone
및 equals
방법. Bar
있습니다 clone
. 위에있는 구조는 이러한 클래스에 대한 테스트를 구조화하는 한 가지 가능한 방법입니다.
(이 #
표기법은 인스턴스 필드를 나타 내기 위해 일부 시스템 (예 : jsdoc)에서 사용됩니다. 따라서 메서드 이름과 함께 사용할 때 호출되는 클래스 메서드가 아니라 클래스의 인스턴스에서 호출되는 메서드를 나타냅니다. 클래스 자체에서). 테스트 스위트는 #
.) 없이도 잘 실행됩니다 .)
배너 제공
Mocha의 일부 기자는 describe
자신이 작성한 보고서에서 귀하가 지정한 이름을 보여줍니다 . 예를 들어 spec
리포터 (를 실행하여 사용할 수 있음 $ mocha -R spec
)는 다음을보고합니다.
Foo
#clone
✓ clones the object
#equals
✓ returns true when the object passed is the same
✓ returns false, when...
Bar
#clone
✓ clones the object
4 passing (4ms)
실행할 부품 선택 도움말
일부 테스트 만 실행하려면 --grep
옵션을 사용할 수 있습니다 . 따라서 Bar
클래스 에만 관심이 있다면을 수행 $ mocha -R spec --grep Bar
하고 출력을 얻을 수 있습니다 .
Bar
#clone
✓ clones the object
1 passing (4ms)
Or if you care only about the clone
methods of all classes, then $ mocha -R spec --grep '\bclone\b'
and get the output:
Foo
#clone
✓ clones the object
Bar
#clone
✓ clones the object
2 passing (5ms)
The value given to --grep
is interpreted as a regex so when I pass \bclone\b
I'm asking only for the word clone
, and not things like clones
or cloned
.
Provide Hooks
In the example above the beforeEach
and afterEach
calls are hooks. Each hook affects the it
calls that are inside the describe
call which is the parent of the hook. The various hooks are:
beforeEach
which runs before each individualit
inside thedescribe
call.afterEach
which runs after each individualit
inside thedescribe
call.before
which runs once before any of the individualit
inside thedescribe
call is run.after
which runs once after all the individualit
inside thedescribe
call are run.
These hooks can be used to acquire resources or create data structures needed for the tests and then release resources or destroy these structures (if needed) after the tests are done.
The snippet you show at the end of your question won't generate an error but it does not actually contain any test, because tests are defined by it
.
To my knowledge, describe is really just there for humans... So we can see different areas of the app. You can nest describe n levels deep.
describe('user',function(){
describe('create',function(){}
});
It's hard to add to Louis' excellent answer. There are a couple of advantages of the describe block that he didn't mention which are the skip
and only
functions.
describe.skip(...) {
...
}
will skip this describe and all its nested describe and it functions while:
describe.only(...) {
...
}
will only execute that describe and its nested describe and it functions. The skip()
and only()
modifiers can also be applied to the it() functions.
Describe is just used for the sake of understanding the purpose of the tests , it is also used to logically group the tests . Lets say you are testing the database API's , all the database tests could come under the outer describe , so the outer describe logically groups all the database related . Lets say there are 10 database related API's to test , each of the inner describe functions defines what those tests are ....
The particular role of describe is to indicate which component is being tested and which method of that component is also being tested.
for example, lets say we have a User Prototype
var User = function() {
const self = this;
function setName(name) {
self.name = name
}
function getName(name) {
return self.name;
}
return{setName, getName};
}
module.exports = User;
And it needs to be tested, so a spec file is created for unit test
var assert = require('assert');
var User = require("../controllers/user.controller");
describe("User", function() {
describe('setName', function() {
it("should set the name on user", function() {
const pedro = new User();
name = "Pedro"
pedro.setName(name);
assert(pedro.getName(), name);
});
});
});
It is easy to see that the purpose of describe is indicating the component to be tested and the nested describe methods indicate which methods needs to be tested
참고URL : https://stackoverflow.com/questions/19298118/what-is-the-role-of-describe-in-mocha
'Programing' 카테고리의 다른 글
R의 glm 모델에 모든 양방향 상호 작용을 자동으로 포함하는 방법 (0) | 2020.11.25 |
---|---|
Mock MVC-테스트 할 요청 매개 변수 추가 (0) | 2020.11.25 |
자동 업데이트는 어떻게 구현해야합니까? (0) | 2020.11.25 |
PowerShell에서 "종료"란 정확히 무엇입니까? (0) | 2020.11.25 |
저장 프로 시저 대. (0) | 2020.11.25 |