我今天开始测试Jasmine,这对我来说是新的。由于我使用的是使用NodeJS开发的GraphQL服务器,因此我使用的是jasmine-node
。
以下是我自己编写的第一个规范,我认为它有效:
const request = require('request');
const config = require('../sources/config');
const base_url = `http://localhost:${config.graphqlPort}/${config.graphqlRoute}`;
describe("GraphQLServer.", () => {
it("Should expect something.", () => {
expect(1).not.toEqual(2);
expect(1).toEqual(1);
expect(true).toBe(true);
expect(false).not.toBe(true);
});
describe('When request is made.', () => {
it('Returns statuscode 200.', () => {
request.get(base_url, (error, response, body) => {
console.log('Error: ', error);
console.log(base_url);
console.log('StatusCode: ', response && response.statusCode);
console.log('Body:', body);
expect(true).toBe(true);
expect(true).toBe(false);
expect(response.statusCode).toBe(200);
expect(response.statusCode).toBe(400);
done();
});
});
});
});
这给出了以下结果:
..
Finished in 0.018 seconds
2 tests, 4 assertions, 0 failures, 0 skipped
Error: null
http://localhost:8000/graphql
StatusCode: 400
Body: {"errors":[{"message":"Must provide query string."}]}
如果这正是我所期待的那么。我没有查询字符串请求,因此预期正文中的错误。
问题是:expects
内的4个无用(明显)it("Should expect something")
工作得很好。这些是结果中的4 assertions
。 expect
内的其他4个it("Returns statuscode 200.")
根本不在结果中(它们不会失败并且它们不会通过),但console.log
是。{/ p >
我在网上找到的每个例子似乎都与我在这里做的完全相同,但我无法让它发挥作用。
答案 0 :(得分:1)
Kev是对的,但Jasmine中的语法涉及在异步执行完成后将您的expect语句放在promise结果中。它看起来像这样:
it ("should do a thing with promises", function(done) {
myObject.doAThingWithPromises('')
.then(function (promiseResult) {
expect(promiseResult).toBeDefined();
done();
})
});
答案 1 :(得分:0)
我忘记了Jasmine的确切语法来建议修复,但我相信我知道答案:这是一个使用promises进行测试的经典案例。结果将在测试完成后返回,因此您的expect
调用不会在他们可能影响测试的环境中发生。
我在代码和jasmine-node文档之间注意到的一个区别是传递给it
的函数应该以{{1}}作为参数,但是你有done
而不是() =>
{1}}。这可能会导致你所看到的行为。