- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我目前正在使用 SailsJS 编写应用程序。到目前为止所做的工作在“手动”测试时按预期工作,但在使用 Mocha 测试时却没有。
我试着关注 SailsJS testing guide ,用 npm 调用测试:
[...]
"scripts": {
"start": "node app.js",
"debug": "node debug app.js",
"test": "mocha test/bootstrap.test.js test/unit/**/*.test.js"
},
[...]
我的测试目录结构如下:
test
├── bootstrap.test.js
├── mocha.opts
└── unit
└── controllers
└── UserController.test.js
boostrap.test.js:
var Sails = require('sails');
var sails;
before(function(done) {
Sails.lift(function(err, server) {
sails = server;
if (err) return done(err);
done(err, sails);
});
});
after(function(done) {
Sails.lower(done);
});
UserController.test.js:
var request = require('supertest');
describe('UsersController', function() {
describe('#logout()', function() {
it('should respond with a 401 status because nobody is logged in', function (done) {
request(sails.hooks.http.app)
.put('/user/logout')
.expect(401, done)
});
});
describe('#signup()', function() {
it('should create and log in an user', function (done) {
request(sails.hooks.http.app)
.post('/user')
.send({
firstname: 'foo',
name: 'bar',
email: 'foo@bar.com',
sex: true,
password: 'foobar',
birthdate: '01/01/1991',
phoneNumber: '+33 3 10 10 10'
})
.expect(200, done)
});
});
describe('#logout()', function() {
it('should log out an user', function (done) {
request(sails.hooks.http.app)
.put('/user/logout')
.expect(200, done)
});
});
describe('#login()', function() {
it('should respond with a 404 status because credentials are invalid', function (done) {
request(sails.hooks.http.app)
.put('/user/login')
.send({
email: 'bar@foo.com',
password: 'barfoo'
})
.expect(404, done)
});
});
describe('#login()', function() {
it('should log in an user', function (done) {
request(sails.hooks.http.app)
.put('/user/login')
.send({
email: 'foo@bar.com',
password: 'foobar'
})
.expect(200, done);
});
});
describe('#login()', function() {
it('should respond with a 401 status because user is already logged in', function (done) {
request(sails.hooks.http.app)
.put('/user/login')
.send({
email: 'foo@bar.com',
password: 'foobar'
})
.expect(401, done);
});
});
});
最后,这是我调用 npm test 时的输出:
> sails@0.0.0 test /Users/fwoelffel/Dev/STOFMA
> mocha test/bootstrap.test.js test/unit/**/*.test.js
UsersController
#logout()
debug: false
debug: req.session -> {"cookie":{"originalMaxAge":null,"expires":null,"httpOnly":true,"path":"/"}}
info: Policy 'authenticated' disallowed to proceed to the next policy
✓ should respond with a 401 status because nobody is logged in (86ms)
#signup()
debug: null === req.session.authenticated || undefined === req.session.authenticated -> true
debug: req.session -> {"cookie":{"originalMaxAge":null,"expires":null,"httpOnly":true,"path":"/"}}
info: Policy 'unauthenticated' allowed to proceed to the next policy
info: User foo@bar.com signed up and logged in.
✓ should create and log in an user (146ms)
#logout()
debug: false
debug: req.session -> {"cookie":{"originalMaxAge":null,"expires":null,"httpOnly":true,"path":"/"}}
info: Policy 'authenticated' disallowed to proceed to the next policy
1) should log out an user
#login()
debug: null === req.session.authenticated || undefined === req.session.authenticated -> true
debug: req.session -> {"cookie":{"originalMaxAge":null,"expires":null,"httpOnly":true,"path":"/"}}
info: Policy 'unauthenticated' allowed to proceed to the next policy
info: No user matching bar@foo.com.
✓ should respond with a 404 status because credentials are invalid (66ms)
#login()
debug: null === req.session.authenticated || undefined === req.session.authenticated -> true
debug: req.session -> {"cookie":{"originalMaxAge":null,"expires":null,"httpOnly":true,"path":"/"}}
info: Policy 'unauthenticated' allowed to proceed to the next policy
info: Found user foo@bar.com.
info: foo@bar.com credentials are valid.
✓ should log in an user (128ms)
#login()
debug: null === req.session.authenticated || undefined === req.session.authenticated -> true
debug: req.session -> {"cookie":{"originalMaxAge":null,"expires":null,"httpOnly":true,"path":"/"}}
info: Policy 'unauthenticated' allowed to proceed to the next policy
info: Found user foo@bar.com.
info: foo@bar.com credentials are valid.
2) should respond with a 401 status because user is already logged in
4 passing (1s)
2 failing
1) UsersController #logout() should log out an user:
Error: expected 200 "OK", got 401 "Unauthorized"
at net.js:1419:10
2) UsersController #login() should respond with a 401 status because user is already logged in:
Error: expected 401 "Unauthorized", got 200 "OK"
at net.js:1419:10
npm ERR! Test failed. See above for more details.
总而言之,我正在测试 auth/unauth API。以下是政策:
我可能做错了什么,但我真的不知道是什么。你能帮忙解决这个问题吗?
如果您需要更多信息,请询问。您可能会找到代码(没有测试,因为它们失败了)on Github .
感谢阅读,祝你有美好的一天!
更新
感谢 elsaar,我将代码更改为:
var request = require('supertest');
var agent;
describe('UsersController', function() {
before(function(done) {
agent = request.agent(sails.hooks.http.app);
done();
})
describe('#logout()', function() {
it('should respond with a 401 status because nobody is logged in', function (done) {
agent
.put('/user/logout')
.expect(401, done)
});
});
describe('#signup()', function() {
it('should create and log in an user', function (done) {
agent
.post('/user')
.send({
firstname: 'foo',
name: 'bar',
email: 'foo@bar.com',
sex: true,
password: 'foobar',
birthdate: '01/01/1991',
phoneNumber: '+33 3 10 10 10'
})
.expect(200, done)
});
});
describe('#logout()', function() {
it('should log out an user', function (done) {
agent
.put('/user/logout')
.expect(200, done)
});
});
describe('#login()', function() {
it('should respond with a 404 status because credentials are invalid', function (done) {
agent
.put('/user/login')
.send({
email: 'bar@foo.com',
password: 'barfoo'
})
.expect(404, done)
});
});
describe('#login()', function() {
it('should log in an user', function (done) {
agent
.put('/user/login')
.send({
email: 'foo@bar.com',
password: 'foobar'
})
.expect(200, done);
});
});
describe('#login()', function() {
it('should respond with a 401 status because user is already logged in', function (done) {
agent
.put('/user/login')
.send({
email: 'foo@bar.com',
password: 'foobar'
})
.expect(401, done);
});
});
});
最佳答案
我认为 session 没有被持久化,所以你在之前的请求中登录的用户不会在以后的请求中登录。单元测试应该是这样的。因此,在运行测试之前,您必须确保用户处于所需的状态(登录或注销)。
编辑 - 您需要使用相同的 super 测试代理实例来保持您的 session - https://github.com/visionmedia/supertest/issues/46#issuecomment-58534736
所以只需在测试开始时执行此操作,并在所有测试中使用相同的代理
var supertest = require('supertest');
agent = supertest.agent(sails.hooks.http.app);
// the use the agent to test your endpoints
关于node.js - 使用 SailsJS 和 Superagent 运行 Mocha 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31531793/
我正在使用 mocha 和 chai 进行 TDD 以测试一些 NodeJS 脚本,每次我想再次运行测试时都必须运行“mocha”。 有没有办法设置 mocha 和 chai 在我保存源文件后立即运行
如果任何测试失败,我正在尝试配置 mocha 以重试整个套件。 我导航到一个 URL,然后填充一个表单并提交,然后用户被重定向,如果找到某个元素,则最后一次测试通过。 如果找不到该元素,我需要再次导航
我想知道是否有办法让 mocha 列出它将执行的所有测试。当我使用 mocha --help 列出它们时,我没有看到任何合理的选项;有几个报告者,但似乎没有一个旨在列出将要处理的文件(或命名将要运行的
before()、after()、beforeEach()、afterEach() 等 mocha Hook 无法正常工作。 only 方法也不起作用。 beforeEach 都没有被调用。我得到一个
我已经看到很多关于此的问题,但所有修复都不适用于我的代码。 我做错了什么?我的 beforeEach 没有被执行。 这是单元测试代码: var assert = require('assert');
如何在 mocha 测试之间共享资源(例如连接)? cookies.test.js: describe('Cookies', function() { it('setCookie()', func
我正在尝试以编程方式运行 mocha。 runner的代码如下: var Mocha = require("mocha"); var mocha = new Mocha(); mocha.report
我正在遵循此 tutorial 的第 1 步 我有以下文件夹结构: ├── lib │ ├── json │ │ ├── messages.json │ │ └── testMessages.json
我希望能够扩展 mocha 测试结果并从可用的 mocha 对象中收听它们。首先,我正在寻找“通过”结果。 看起来他们可能是从套件中订阅的,但我不确定如何...... 我尝试了以下我认为会听到我所有测
我正在运行此测试(简化),该测试按预期失败了……但是,尽管失败了,但它仍要等待20秒的全部超时时间。如何使它立即失败? it("should fail before timeout", functio
我是Java语言世界的新手,主要涉足OOP。我试图在网上查找Karma和 Mocha 之间的明显区别,但徒劳无功。我知道Karma是一个测试运行器,而Mocha是一个单元测试框架,但是Mocha也有自
我有一段代码,其中某些测试在 CI 环境中总是会失败。我想根据环境条件禁用它们。 如何在运行时执行期间以编程方式跳过 mocha 中的测试? 最佳答案 您可以通过在describe或it block
我想使用 chai 应该断言检查我的响应对象是否包含提到的属性。 下面是我的代码片段: chai.request(app) .post('/api/signup') .
例如,默认情况下,背景颜色为绿色或红色。我想将绿色/红色作为前景,将背景作为我的默认颜色(白色)。 因为在浅色终端配色方案上很难看到任何东西,因为前景是黑色的,而背景会变成红色或绿色。 最佳答案 在
有没有办法在 mocha 记者中获取当前测试的文件名? 我在基础和示例中找不到任何内容。 最佳答案 实际上,文件名在 中传递给了 Suite文件 Mocha 中的字段从 this 开始拉取请求。只是现
在我走向 TDD 的过程中,我使用了 Mocha、chai 和 sinon。 那里肯定有一个学习曲线。 我的目标是编写一个测试来验证 method4 是否已执行。我如何做到这一点? //MyData.
我正在使用mocha和chai作为断言。 我在规范中有几个主张: Exp1.should.be.true Exp2.should.be.true Exp3.should.be.true 如果其中之一失
根据 Mocha 文档,“Mocha 测试串行运行”这意味着按照它们的定义顺序。 我的问题是:是什么让 异步 (带有完成回调)测试不同于 同步 ? 最佳答案 您通过传递给 it 来告诉 Mocha 测
我正在尝试将 mocha 绑定(bind)写入 PureScript 并且对 Control.Monad.Eff 完全感到困惑 describe(function(){ //do stuff }
我对 mocha 框架有点陌生。此代码应该抛出异常,但不会。 (为简单起见,将所有代码放入测试中) describe("Test", function() { it("this should
我是一名优秀的程序员,十分优秀!